Hackage有几个monad变换器包:
-
mtl:Monad变压器库
-
transformers:混凝土仿函数和monad变换器
-
monads-fd:Monad类,使用函数依赖项
-
monads-tf:Monad类,使用类型系列
-
monadLib:monad变形金刚的集合 .
-
mtl-tf:使用类型族的Monad变换器库 .
-
mmtl:模块化Monad变压器库
-
mtlx:具有类型索引的Monad变换器库,提供'free'副本 .
-
compose-trans:可组合的monad变换器
(也许我错过了一些)
我们应该使用哪一个?
mtl是Haskell平台中的一个,但我一直听说reddit它不太酷 .
但无论如何,选择有什么不好,这不是一件好事吗?
好吧,我看到数据访问器的作者必须如何制作所有这些以满足流行的选择:
-
data-accessor-monadLib库:monadLib monad的访问器函数
-
data-accessor-monads-fd库:使用Accessor访问monads-fd状态monad类中的状态
-
data-accessor-monads-tf库:使用Accessor访问monads-tf状态monad类型系列中的状态
-
data-accessor-mtl库:使用Accessor访问mtl State monad类中的状态
-
data-accessor-transformers库:使用Accessor访问变换器状态monad中的状态
我想如果这种情况继续发展,例如几个竞争的箭头包演变,我们可能会看到类似:spoonklink-arrows-transformers,spoonklink-arrows-monadLib,spoonklink-tfArrows-transformers,spoonklink-tfArrows-monadLib,...
然后我担心如果spoonklink被分叉,Hackage将耗尽磁盘空间 . :)
问题:
-
为什么有这么多monad变压器包?
-
为什么mtl [被认为]不冷却?
-
有哪些主要区别?
-
这些看似竞争的大部分包都是由Andy Gill编写的,由Ross Paterson维护 . 这是否意味着这些软件包不是竞争对手,而是以某种方式协同工作?安迪和罗斯认为他们自己的任何套餐都已过时吗?
-
你和我应该使用哪一个?
3 回答
其中一堆几乎完全等价:
mtl
使用GHC扩展,但transformers
是Haskell 98 .monads-fd
和monads-tf
是transformers
的附加组件,分别使用功能依赖项和类型系列,两者都提供了mtl
中缺少transformers
的功能 .mtl-tf
是mtl
使用类型系列重新实现 .基本上,
mtl
==transformers
monads-fd
,mtl-tf
==transformers
monads-tf
. 我认为,改进的transformers
及其相关软件包的可移植性和模块性是为什么mtl
这些日子不太酷的原因 .mmtl
和mtlx
似乎都与mtl
相似和/或基于mtl
,具有API差异和额外功能 .MonadLib
似乎对事情有不同的看法,但我并不直接熟悉它 . 似乎也使用了很多GHC扩展,比其他扩展更多 .一目了然
compose-trans
似乎更像是元编程的东西,用于创建monad变换器 . 它声称与Control.Monad.Trans
兼容......我的意思是mtl
?无论如何,我建议采用以下决策算法:
您是否需要新项目的标准单子?使用
transformers
&co . ,帮助我们休息mtl
.您是否已在大型项目中使用
mtl
?transformers
不完全兼容,但没有人会因为没有切换而杀了你 .其他一个软件包是否提供了您需要的异常功能?不妨使用它而不是自己动手 .
仍然不满意?把它们全部扔掉,下载category-extras,用一页半难以理解的抽象无意义的通用代码来解决所有世界的问题 .
目前?你应该使用
mtl
. 正在发生的事情是,transformers
图书馆正在以一种和平共存的方式从MTL中分解出来,但最后检查的情况还不是这样 .当发生这种情况时,您将能够导入
monads-fd
和transformers
并获得(几乎)相同的接口,但State
等将是StateT
的别名 .所以我写信给
mtl
,但不要依赖State,Reader等目前data
这个事实,因为它们将被type
取代 .MonadLib
是Iavor一直在努力的另一种选择,可以安全使用,因为它不与其他模块共享任何模块名称,但具有完全不同的使用模式 .爱德华·凯梅特在_782182中提到的因素在2010年底完成 . 它的最终结果是monads-fd, Build 在变形金刚之上,成为mtl的第2版 . 由于mtl无处不在,monads-tf从未真正流行起来 . 截至2017年初,mtl和变压器是唯一被广泛使用的monad变压器库 .