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