
Paterson, Ross wrote:
The principal flaw of ErrorT is that the monad methods had constraints on the exception type, even though they don't need them. (A lesser issue was that the naming was inconsistent with the other transformers.)
One possibility would be to change the MonadFail instance for ExceptT to give the functionality of the ErrorT instance:
instance (Monad m, Message e) => MonadFail (ExceptT e m)
Indeed, with the MonadFail proposal coming to its conclusion that will be possible, and personally I'd be happy with that. However, I suspect that both possible MonadFail instances instance (Monad m, Message e) => MonadFail (ExceptT e m) instance (MonadFail m) => MonadFail (ExceptT e m) are actually useful, and then we need two types, even though it looks awkward. Cheers, Bertram