문제

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