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)