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).


_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to