[Haskell-cafe] Stacking monads
Andrew Coppin
andrewcoppin at btinternet.com
Fri Oct 3 16:12:23 EDT 2008
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".)
More information about the Haskell-Cafe
mailing list