Haskell does not have a good low level library wrappers story, unlike Rust.
Nobody prepared it for adoption nearly as much as Rust evangelists did for their language. Years of hard work they invested into maintaining bindings as hobby projects paid off.
People care a lot more about Rust-C++ interop because people expect to replace C++ with Rust. People don’t care as much about Haskell-C++ interop, so in the end people just rely on C ABI because it’s the lowest common denominator. If your low level library has a C interface, Haskell works very fine. Some people even prefer the OpenSSL C library over Haskell-native TLS.
Businesses care. I worked with Haskell in production (a fairly normal B2B SaaS). Some things you would expect to have in the ecosystem had to be maintained domestically.
My former company was generous enough to publish most of these[0] as open source projects. But what's really telling is that oftentimes vendoring a commonly used OSS library was unavoidable.
It totally can wrap c and c++ and whatnot. The hard part is done only once, then it is incremental maintenance that's mechanical. Some are even scripted. Huge API surfaces like Vulkan and AWS were bound and used that way.
Nobody prepared it for adoption nearly as much as Rust evangelists did for their language. Years of hard work they invested into maintaining bindings as hobby projects paid off.