failMaybeT实例中查看Monad的源代码:

instance (Monad m) => Monad (MaybeT m) where
    fail _ = MaybeT (return Nothing)


很明显,没有使用fail的参数。那么为什么没有像quit :: MaybeT m ()这样的更干净的函数可以使我们不必每次键入fail ""呢?还是我错过了什么?

最佳答案

这就是mzeroMaybeT is实例的MonadPlus(除了类型比您提供的类型更通用:对于MaybeT实例,我们有mzero :: Monad m => MaybeT m a)。

10-08 12:35