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

Pet*_*lák 17 monads haskell free-monad

免费MonadPlus定义为

data Free f a = Pure a | Free (f (Free f a)) | Plus [Free f a]
Run Code Online (Sandbox Code Playgroud)

已使用以下注释(changelog)在free 4.6 中删除:

删除了Control.MonadPlus.Free.使用FreeT f []来代替,而结果将是守法的.

问题是什么,特别是哪些法律没有?

dfe*_*uer 13

根据bug跟踪器中的这个问题,旧定义不遵守关联法则.


虽然我对这些事情知之甚少,但我怀疑另一个问题是冗余:

Pure a
Plus [Pure a]
Plus [Plus [Pure a]]
...
Run Code Online (Sandbox Code Playgroud)

所有似乎都代表着同样的事情.自由结构通常被认为是独特的.有些时候它们不能被唯一地表示(例如,自由的阿贝尔群体),但是在可能的情况下它们应该是.

实际上,我认为建议的替代方案会遇到同样的问题,尽管可能有可能通过使用NonEmpty而不是来修复它[].因此,这种改变可能只是从库中消除多余的瑕疵.

  • 你不应该在帖子中使用"更新"或"编辑"之类的东西.编辑历史记录足以查看更改/添加内容的时间.我冒昧地删除它们(但不是内容)并移动引用顶部错误跟踪器的部分,以便更容易访问它. (3认同)
  • @MigMit你称之为"正常方式"的是**噪音**.如果我正在寻找答案,为什么我应该阅读数百行不相关的"编辑"以最终获得2行答案?答案应该最大化有用性,这意味着可读性和易于访问.将信息拆分成各种块通常不是一个好的解决方案.当问题/答案仍然不清楚/不完整时可能没问题,但一旦明确内容应该组织得很好.如果有人想知道它是如何演变的,他可以查看编辑历史,但那是元数据. (3认同)