Laws for Monad and MonadPlus.
Dylan Thurston
dpt@math.harvard.edu
Tue, 13 Mar 2001 15:13:26 -0500
On Tue, Mar 13, 2001 at 04:15:31PM -0330, Theodore Norvell wrote:
> What about MonadPlus? By analogy with semirings, I came up with:
>
> Zero: mzero >>= k = mzero = p >>= (\x -> mzero)
> Identity: p `mplus` mzero = p = mzero `mplus` p
> Commutativity: p `mplus` q = q `mplus` p
> Right distributivity: (p `mplus` q) >>= k = (p >>= k) `mplus` (q >>= k)
> Left distributivity: p >>= (\x->j x `mplus` k x) = (p >>= j) `mplus` (p >== k)
> [provided x is not free in j or k]
>
> But commutativity does not hold for Maybe or [], left distributivity
> does not hold for Maybe and right distributivity does not hold for [],
> so these can't be right.
Incidentally, a Set monad seems to do better: it would satisfy all
these laws.
Best,
Dylan