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

最佳答案

甚至不必是Monad,这适用于每个Applicative。所以是的,您可以定义:

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

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

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

关于haskell - 每个monad都是monoid吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16548344/

10-13 06:33