fd,monadLib和选择的悖论
Hackage提供了几个适用于monad变压器的软件包:
(也许我错过了一些)
我们应该使用哪一个?
mtl是Haskell平台中的一员,但我一直听到reddit的消息说它并不酷。
但无论如何,选择有什么不好,这不是一件好事吗?
那么,我看到了数据访问者的作者是如何使所有这些都迎合流行的选择的:
我想如果这样下去,例如几个竞争性的箭头包发展,我们可能会看到类似的东西:勺子链接箭头变形金刚,勺子链接箭头monadLib,spoonklink-tf箭头变换器,spoonklink-tfArrows-monadLib,...
然后我担心如果spoonklink分叉,Hackage将耗尽磁盘空间。 :)
问题:
它们中的一些几乎完全相同:
mtl使用GHC扩展,但transformers是Haskell 98。 monads-fd和monads-tf是transformers的附件,分别使用功能依赖和类型系列,两者都提供了transformers缺少的mtl功能。 mtl-tf是mtl使用类型的家庭重新实现。 所以基本上, mtl == transformers ++ monads-fd , mtl-tf == transformers ++ monads-tf 。 我认为, transformers及其相关套件的改进的便携性和模块化是为什么mtl现在不冷却的原因。
mmtl和mtlx似乎都与mtl类似和/或基于mtl ,具有API差异和额外功能。
MonadLib似乎在处理问题上有相当不同的看法,但我并不直接熟悉它。 也似乎使用了很多GHC扩展,比其他更多。
一眼看来, compose-trans似乎更像是元编程创建单核变压器的东西。 它声称与Control.Monad.Trans兼容...我猜的意思是mtl ?
无论如何,我会建议以下决策算法:
transformers &CO。,帮助我们打好mtl休息。 mtl ? transformers并不完全兼容,但没有人会因为不切换而杀了你。 category-extras ,并且用一页半的难以理解的抽象废话令人惊叹的通用代码来解决世界上所有的问题。 目前呢? 你应该使用mtl 。 现在发生的事情是, transformers图书馆正在被MTL分解出来, monads-fd和monads-tf可以和平共处,但最终检查结果并非如此。
当发生这种情况时,您将能够导入monads-fd和transformers并获得(几乎)相同的接口,但State等将成为StateT的别名。
所以我会写信给mtl ,但不要依赖State,Reader等等当前是data的事实,因为它们将被type s取代。
MonadLib是Iavor一直在研究的另一种选择,可以安全地使用MonadLib,因为它不与其他人共享任何模块名称,但具有相当不同的使用模式。
Edward Kmett在他的回答中提到的因素在2010年底完成。其最终结果是monads-fd,建立在变形金刚上,成为mtl的第二版。 作为mtl无处不在的结果,monads-tf从未真正被吸引过。 截至2017年初,mtl和变压器是唯一可以看到广泛使用的monad变压器库。
链接地址: http://www.djcxy.com/p/66621.html上一篇: fd, monadLib, and the paradox of choice
下一篇: Count(*) vs Count(1)
