The reason for this requirement is lifetime subtyping: https://doc.rust-lang.org/nomicon/subtyping.html
Type parameter variance is inferred from usage (e.g. covariant for normal fields, contravariant for function arguments) and without a usage there's no way to infer it.
In Haskell, you can omit these fields entirely, and achieve the same thing just by annotating the function.
For example, in Haskell, we can have
whereas in Rust, it would be: