[Haskell-cafe] Fwd: incorrect MonadPlus law "v >> mzero = mzero"?
John Lato
jwlato at gmail.com
Mon Feb 3 23:10:47 UTC 2014
On Mon, Feb 3, 2014 at 3:00 PM, Brandon Allbery <allbery.b at gmail.com> wrote:
> On Mon, Feb 3, 2014 at 5:51 PM, Dan Burton <danburton.email at gmail.com>wrote:
>
>> Indeed this issue is not limited merely to multiple failure values.
>>
>> >>> runMaybeT $ lift (putStrLn "effect") >> mzero
>> effect
>> >>> runMaybeT mzero
>>
>> So you're right. This law is being violated
>>
>
> I thought it was fairly well known that IO violates one of the monad laws,
> in a way that would lead to this?
>
The choice of IO for the underlying monad is irrelevant. The issue is that
a later mzero in the transformer cannot undo an earlier action in a lower
monad. For example:
>>> Prelude Control.Monad.Maybe Control.Monad.State> runStateT (runMaybeT $ (lift $ put "bar") >> mzero) "foo"
(Nothing,"bar")
>>> Prelude Control.Monad.Maybe Control.Monad.State> runStateT (runMaybeT mzero) "foo"
(Nothing,"foo")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20140203/58127aec/attachment.html>
More information about the Haskell-Cafe
mailing list