Even with Haskell's extreme facility in making monads invisible, Rust's direct style with `?` is way easier to work with.
Likewise, replacing IO with an ownership system that keeps you from doing anything really stupid is both safer and, in most cases, a lot easier.
(Especially when you start needing monad transformers to keep all the layers straight.)
Oh, and did I mention faster? Way faster. (Part of that is Haskell's insistence on laziness, though. If it was cool with immediate execution, the gap would be narrower. Kudos to GHC for making the gap as small as it is, also.)
But for me, the key is that the logic is easier in the most common cases, and in the complex cases rather than composing things that end up too hard to reason about anyway, I would just build something custom either way, so that matters a lot less than it seems like it might.
(Haskell still has some really nice features compared to Rust, but error-handling isn't one of them IMO.)