[Haskell] MonadPlus vs. Monoid
Twan van Laarhoven
twanvl at gmail.com
Mon Jan 9 13:42:50 EST 2006
I was wondering, in the MonadPlus documentation it says that:
* mzero is the identity of mplus (and some extra conditions)
* mplus is an associative operation
While for Monoid we have:
* mempty is identity of mappend
* mappend is an associative operation
MonadPlus is of course a 'stronger' assertion. But why is not every
instance of MonadPlus also an instance of Monoid?
> instance MonadPlus m => Monoid (m a) where
> mempty = mzero
> mappend = mplus
The only type that is an instance of both is [a]. But I see no reason
why it there should not be a Monoid instance for other MonadPlus types.
In particular, an instance for Maybe could be useful with a writer monad
when you are only interested in the first result.
More information about the Haskell