18 Nov
2016
18 Nov
'16
6:45 a.m.
The documentation for Control.Monad.Fail notes
If your Monad is also MonadPlus, a popular definition is
fail _ = mzero
This could be made a default definition for MonadPlus or Alternative
class Monad m => MonadFail m where fail :: String -> m a fail = const empty default fail :: Alternative m => String -> m a
This simplifies instances like [] and Maybe
instance MonadFail [] instance MonadFail Maybe