On 2008 Oct 3, at 16:12, Andrew Coppin wrote:
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".)
It also touches on some Haskell98 braindamage. (Look up "MonadZero".)
--
brandon s. allbery [solaris,freebsd,perl,pugs,haskell] [EMAIL PROTECTED]
system administrator [openafs,heimdal,too many hats] [EMAIL PROTECTED]
electrical and computer engineering, carnegie mellon university KF8NH
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe