Brandon S. Allbery KF8NH wrote:
On Oct 3, 2008, at 15:10 , Andrew Coppin wrote:
Again, it looks like MonadPlus == Monad + Monoid, except all the
method names are different. Why do we have this confusing duplication?
Because typeclasses aren't like OO classes. Specifically: while you
can specify what looks like class inheritance (e.g. "this Monad is
also a Monoid" you can't override inherited methods (because it's a
Monad, you can't specify as part of the Monad instance the definition
of a Monoid class function). So if you want to define MonadPlus to
look like a Monad and a Monoid, you have to pick one and *duplicate*
the other (without using the same names, since they're already taken
by the typeclass you *don't* choose).
I was thinking more, why not just delete MonadPlus completely, and have
any function that needs a monad that's also a monoid say so in its
context? (Obviously one of the answers to that is "because it would
break vast amounts of existing code".)
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe