Yes, I think there should be a MonadFail distinct from MonadPlus. Some types, like IO, are not in MonadPlus, but have a special implementation of the fail method.
Personally, I think fail should just be removed, but that would break existing code. The fail method was introduced for the wrong reasons (better error messages was the excuse). -- Lennart On Wed, Dec 15, 2010 at 11:51 AM, John Smith <volderm...@hotmail.com> wrote: > 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 > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe