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