<div dir="ltr"><div><div>The documentation for Control.Monad.Fail notes<br><br>> If your Monad is also MonadPlus, a popular definition is<br></div>>> fail _ = mzero<br><br></div><div>This could be made a default definition for MonadPlus or Alternative<br><br></div><div>> class Monad m => MonadFail m where<br></div><div>>   fail :: String -> m a<br></div><div>>   fail = const empty<br></div><div>>   default fail :: Alternative m => String -> m a<br><br></div><div>This simplifies instances like [] and Maybe<br><br></div><div>> instance MonadFail []<br></div><div>> instance MonadFail Maybe<br></div></div>