【发布时间】:2018-04-02 20:13:03
【问题描述】:
我正在研究管理 Monoids 的定律,两个定律之一规定附加操作必须是关联的。对于函数组合,这意味着对于给定的所有函数X->X,有 3 个函数 f、g 和 h (f∘g)∘h=f∘(g∘h)
在 scalaz 中,我看到有一种称为 EndoMonoid 的类型,它使用 compose 进行追加,这与普通函数组合的工作方式不同
val f : Int => Int = x => x*x
val g : Int => Int = y => y + 1
val e = f.endo |+| g.endo
val d = g.endo |+| f.endo
e run 10
Int = 121
d run 10
Int = 101
从上面的结果可以看出,函数不满足关联属性。这是否意味着并非所有X -> X 类型的函数都是幺半群?
【问题讨论】: