[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