由于每个Monad
在排序操作中都是Monoid
。
为什么Monad
不在haskell中继承Monoid
?
答案 0 :(得分:12)
它不一定是Monad
偶数,这适用于每个Applicative
。所以是的,你可以定义:
class (Functor f, Monoid (f ())) => Applicative f where
但这意味着每次编写Monoid
实例时都必须提供Applicative
实例。这可能非常烦人,因为这个Monoid
实例不会经常使用。
更好的解决方案是在f ()
周围创建一个newtype包装器,然后您可以一劳永逸地为所有应用程序仿函数提供Monoid
实例。 the reducers package中有一个随时可用。