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