2013-05-14 45 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随时可用。