On Sun, 13 Feb 2005 17:59:57 -0500, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> G'day all.
> 
> Quoting Remi Turk <[EMAIL PROTECTED]>:
> 
> > According to http://www.haskell.org/hawiki/MonadPlus (see also
> > the recent thread about MonadPlus) a MonadPlus instance
> > should obey m >> mzero === mzero, which IO doesn't. IOW, the
> > MonadPlus instance for IO (defined in Control.Monad.Error)
> > probably shouldn't be there.
> 
> Clearly the wiki page has not been updated to reflect the current
> debate. :-)
> 
> I've changed the wording to this.  Anyone disagree?
> 
>     Note: There are theoretical reasons why ''mzero'' should be a
>     right-zero for (>>=), but surprisingly few of the existing MonadPlus
>     instances actually obey this law.  {{{IO}}} does not, and neither do
>     any ["MonadTransformer"]s, since they may be stacked on top of {{{IO}}}.
>     This suggests that either some of the extant MonadPlus instances are
>     inappropriate, or that the law itself might be incorrect.  There is
>     continuing debate over this, and the dust has not yet settled.
> 
I think it's unfair to the monad transformers to simply say that they
don't obey the law. The interesting thing is whether they *preserve*
the law. A monad transformer T preserves a law if given a monad M
which obeys the law holds then the monad T M obeys the law. I haven't
checked if this is the case for any of the monad transformers in the
hierarchical libraries though. But I think that the wording should be
changed so that they aren't blamed for breaking the law.

(I can't believe I'm taking sides with monad transformers as if they
where human. I spend too much time hacking haskell I guess...)

/Josef
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to