在fail
的MaybeT
实例中查看Monad
的源代码:
instance (Monad m) => Monad (MaybeT m) where
fail _ = MaybeT (return Nothing)
很明显,没有使用
fail
的参数。那么为什么没有像quit :: MaybeT m ()
这样的更干净的函数可以使我们不必每次键入fail ""
呢?还是我错过了什么? 最佳答案
这就是mzero
的MaybeT
is实例的MonadPlus
(除了类型比您提供的类型更通用:对于MaybeT
实例,我们有mzero :: Monad m => MaybeT m a
)。