[Haskell-beginners] Monad transformers and MonadPlus

Antoine Latter aslatter at gmail.com
Fri Jul 30 07:56:44 EDT 2010


You could always add a MondPlus instance to IO directly (or a newtype
wrapper).

'mplus' would set up exception handling and 'mzero' would through an
exception. You might want to limit it to a subset of exceptions, though.

Antoine

On Jul 30, 2010 5:09 AM, "Johann Bach" <johann.bach1127 at gmail.com> wrote:

This interesting page in Wikibooks describes how to write MaybeT:

http://en.wikibooks.org/wiki/Haskell/Monad_transformers

And it makes MaybeT an instance of MonadPlus. Even when used with IO
as the inner monad.

the constraint on the inner monad is Monad, not Monad plus:

 instance (Monad m) => MonadPlus (MaybeT m) where

Apparently IO is not normally an instance of MonadPlus. It is
interesting to be able to combine IO operations with mplus, because
the idea of "trying computations until one succeeds" is so common in
IO.

Then I started wondering if StateT or ErrorT could be used to make IO
the inner monad of a MonadPlus instance. Well, StateT is an instance
of MonadPlus but with a MonadPlus constraint on the inner monad, so IO
won't cut it.

This leads me to wonder if there is a way to write mplus and mzero in
StateT or ErrorT without a MonadPlus constraint on the inner monad.
But if not, what was special about MaybeT as described in Wikibooks?
_______________________________________________
Beginners mailing list
Beginners at haskell.org
http://www.haskell.org/mailman/listinfo/beginners
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20100730/4a115ae5/attachment-0001.html


More information about the Beginners mailing list