in reply to @ 2015-320 18:38 UTC
The constraints for Monad code using fail become (Monad m, ApplicativeFail m) => instead of the simpler MonadFail m =>. If we expect the common use of fail to be in Monad — not Applicative — do-notation, this leaves us with more verbose constraints.
Why is this a problem? Having multiple constraints when using multiple features is a normal and useful feature of Haskell.