gpt4 book ai didi

Haskell - 实现 Monoid 如果运算符不是关联的会发生什么

转载 作者:行者123 更新时间:2023-12-03 14:53:23 25 4
gpt4 key购买 nike

根据定义或幺半群,二元运算符必须是关联的,例如A op (B op C) == (A op B) op C .

base mconcat definition在 haskell 是:

mconcat = foldr mappend mempty

因为我知道 mconcat 的实现细节函数,定义和使用函数不关联的假幺半群会发生什么不好的事情吗?例如定义减法或除法的实例。

这可能有用还是我错过了重点?

最佳答案

在类型安全方面不会发生任何坏事:您的程序仍然不会崩溃。

但是一个数据结构依赖于你的 Monoid实例可能会给出意外或错误的结果。

考虑一棵在插入时重新平衡的树,它提供了一种使用它们的 Monoid 组合其元素的方法。实例。然后重新平衡,这应该是一个内部操作并且对你不可见,并且引用透明度“在道德上被破坏” - 相同的输入(直到据称隐藏的内部),但不同的输出。

关于Haskell - 实现 Monoid 如果运算符不是关联的会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com