質問

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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top