Ashley Yakeley writes:

> In article <[EMAIL PROTECTED]>,
>  Jules Bean <[EMAIL PROTECTED]> wrote:
> 
> > So, anyone? What are the laws that MonadPlus is supposed to satisfy?
> 
> These are what I think they should be:
> 
>   mplus mzero a = a
>   mplus a mzero = a
>   mplus (mplus a b) c = mplus a (mplus b c)
>   mzero >>= a = mzero
>   (mplus a b) >>= c = mplus (a >>= c) (b >>= c)
> 
> These are what is found in Martin and Gibbons paper, even as they're 
> wrong that Maybe can follow them.
> 
>
<http://web.comlab.ox.ac.uk/oucl/work/jeremy.gibbons/publications/
tactics
> ..pdf>
> 

Philip Wadler listed those as the laws he "would usually insist on" in a
1997 message[1].

    [1] <http://www.dcs.gla.ac.uk/mail-www/haskell/msg00057.html>

He also mentions two other possible, but problematic, laws:

    m >>= \x -> mzero           == mzero
    m >>= \x -> k x `mplus` h x == m >>= k `mplus` m >>= h

The first doesn't hold when m is bottom. The second doesn't hold for
lists.

-- 
David Menendez <[EMAIL PROTECTED]> <http://www.eyrie.org/~zednenem/>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to