[Haskell-cafe] [Haskell] Functor => Applicative => Monad

John Smith voldermort at hotmail.com
Wed Dec 15 12:51:22 CET 2010


On 15/12/2010 11:39, Lennart Augustsson wrote:
> Any refutable pattern match in do would force MonadFail (or MonadPlus if you prefer).  So
> 1.  (MonadFail m) => a -> m a,   \ a -> return a
> 2.  (MonadFail m) => m a,   mfail "..."
> 3.  (MonadFail m) => Maybe a -> m a,   \ a -> case a of Nothing -> mfail "..."; Just x -> return x
> 4.  (Monad m) => a -> b -> m a,   \ a b -> return a
> 5.  (Monad m) => (a, b) -> m a,   \ (a, b) -> return a
>
> As far as type inference and desugaring goes, it seems very little would have to be changed in an implementation.

Is there a need for a MonadFail, as distinct from mzero? fail always seems to be defined as error in ordinary monads, 
and as mzero in MonadPlus (or left at the default error).




More information about the Haskell-Cafe mailing list