Recently I asked about how to put a bunch of closures with the same signature into a vector in Rust. Coming from a Haskell background, it seemed a bit complicated, with Rust closures each having their own unique types and needing a trait to represent them. In Haskell, a lambda is typed by its signature and if the signature is the same, the type is the same.
Is there a semantic difference between a Rust closure and a Haskell lambda function that makes for these differences?