data Free f a = Pure a | Free (f (Free f a)) | Plus [Free f a]
已在免费 4.6 中删除,并带有以下注释 (changelog):
Removed
Control.MonadPlus.Free
. UseFreeT f []
instead and the result will be law-abiding.
问题是什么,特别是哪些法律不成立?
最佳答案
据此issue在错误跟踪器中,旧定义不遵守关联定律。
虽然我对这些事情知之甚少,但我怀疑另一个问题是冗余:
Pure a
Plus [Pure a]
Plus [Plus [Pure a]]
...
似乎都代表着同一件事。自由结构通常应该是唯一的。有时它们不能被唯一地表示(例如,自由阿贝尔群),但在可能的情况下它们应该是。
实际上,我认为建议的替代方案遇到了同样的问题,尽管可以通过使用
NonEmpty
来修复它。而不是 []
.所以这个改变可能只是从库中删除多余的垃圾。
关于haskell - Control.MonadPlus.Free 出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185389/