每个monad都是monoid?

时间:2013-05-14 16:30:31

标签: haskell category-theory

由于每个Monad在排序操作中都是Monoid。 为什么Monad不在haskell中继承Monoid

1 个答案:

答案 0 :(得分:12)

它不一定是Monad偶数,这适用于每个Applicative。所以是的,你可以定义:

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

但这意味着每次编写Monoid实例时都必须提供Applicative实例。这可能非常烦人,因为这个Monoid实例不会经常使用。

更好的解决方案是在f ()周围创建一个newtype包装器,然后您可以一劳永逸地为所有应用程序仿函数提供Monoid实例。 the reducers package中有一个随时可用。