Since every Monad
is a Monoid
on the sequencing operation.
Why doesn't Monad
inherit Monoid
in haskell?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With