I'd just like to add one further remark. If we had a separate MonadFail class then we could get back the original behavior by imposing an Error constraint on it, but without the problems we get by imposing it on the Monad instance instead. - Jake