Reputation: 1270
Since every Monad
is a Monoid
on the sequencing operation.
Why doesn't Monad
inherit Monoid
in haskell?
Upvotes: 10
Views: 502
Reputation: 12000
It doesn't have to be a Monad
even, this works for every Applicative
. So yes, you could define:
class (Functor f, Monoid (f ())) => Applicative f where
But this means that you would have to provide the Monoid
instance every time you write an Applicative
instance. That can be quite annoying, certainly since this Monoid
instance would not be used very often.
A better solution is to create a newtype wrapper around f ()
, and then you can provide a Monoid
instance for all applicative functors once and for all. There's one readily available in the reducers package.
Upvotes: 13