2013-05-14 77 views
9

由於每個Monad是關於測序操作的Monoid。 爲什麼Monad在haskell中繼承Monoid每個monad都是monoid?

+0

您在這裏的定序操作究竟意味着什麼? – 2013-05-14 17:27:33

+2

@Rymoid:我很確定它是'>>'。 – 2013-05-14 17:31:45

+0

@TikhonJelvis:有限形式的'>>',對吧? – 2013-05-14 17:39:39

回答

12

即使是這樣,它也不一定是Monad,這適用於每個Applicative。所以,是的,你可以定義:

class (Functor f, Monoid (f())) => Applicative f where 

但這意味着你將不得不每次你寫一個Applicative實例時提供Monoid實例。這可能是相當煩人的,當然因爲這個Monoid實例不會經常使用。

更好的解決方案是創建一個圍繞f()的新類型包裝,然後您可以爲所有應用函數提供一個全新的Monoid實例。有一個在the reducers package隨時可用。