实例化 Monoid类型包括具有 Monoid 返回值的列表,数字和函数等。要实例化 Monoid,类型必须支持组合其值的关联二元运算(mappend(<>)),并且具有特殊的值(mempty),以便将值与其组合不会更改该值:

mempty  <>  x == x
x <>  mempty  == x

x <> (y <> z) == (x <> y) <> z

直观地说,Monoid 类型是类似列表的,因为它们支持将值附加在一起。或者,Monoid 类型可以被认为是我们关心订单而不是分组的值序列。例如,二叉树是 Monoid,但是使用 Monoid 操作我们无法看到它的分支结构,只能遍历其值(参见 FoldableTraversable)。

必需的方法

  • mempty::Monoid m => m
  • mappend::Monoid m => m -> m -> m

直接超级类

没有