haskell - Control.MonadPlus.Free 出了什么问题?

标签 haskell monads free-monad monadplus

free MonadPlus定义为

data Free f a = Pure a | Free (f (Free f a)) | Plus [Free f a]

已在免费 4.6 中删除,并带有以下注释 (changelog):

Removed Control.MonadPlus.Free. Use FreeT 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/

相关文章:

haskell - 为什么 Haskell 没有在函数签名中推断数据类型的类型类?

haskell - 编写一个高阶函数来捕获常见模式haskell

scala - 如何将 free monad 与 Future[M[_]] 一起使用

haskell - 如何使用自由单子(monad)来表达延续单子(monad)?

pointers - Haskell中的指针相等?

haskell - 为什么函数组合需要括号?

spring - Spring context作为Reader monad

Haskell ReaderT Env IO 样板

haskell - (>>=) 的执行顺序不是我所期望的

purescript - 为自由 monad 定义一个解释器