Hackage 有几个用于 monad 转换器的包:
- mtl : Monad 转换器库
- 变压器:具体函子和单子变压器
- monads-fd : Monad 类,使用函数依赖
- monads-tf : Monad 类,使用类型族
- monadLib:monad 转换器的集合。
- mtl-tf:使用类型族的 Monad 转换器库。
- mmtl : 模块化 Monad 变压器库
- mtlx:具有类型索引的 Monad 转换器库,提供“免费”副本。
- compose-trans : 可组合的 monad 转换器
(也许我错过了一些)
我们应该使用哪一个?
mtl 是 Haskell 平台中的一个,但我一直在 reddit 上听到它不酷。
但是无论如何选择有什么不好的,这不只是一件好事吗?
好吧,我看到了例如 data-accessor 的作者如何不得不做出所有这些来迎合流行的选择:
- data-accessor-monadLib 库:monadLib 的 monad 的访问器函数
- data-accessor-monads-fd 库:使用 Accessor 访问 monads-fd State monad 类中的状态
- data-accessor-monads-tf 库:使用 Accessor 访问 monads-tf State monad 类型族中的状态
- data-accessor-mtl 库:使用 Accessor 访问 mtl State monad 类中的状态
- data-accessor-transformers 库:使用 Accessor 访问变压器状态单子中的状态
我想如果这种情况继续下去,例如几个相互竞争的 Arrow 包演变,我们可能会看到类似的东西:spoonklink-arrows-transformers、spoonklink-arrows-monadLib、spoonklink-tfArrows-transformers、spoonklink-tfArrows-monadLib,...
然后我担心如果spoonklink 被分叉,Hackage 会耗尽磁盘空间。:)
问题:
- 为什么有这么多单子变压器包?
- 为什么 mtl [认为] 不酷?
- 主要区别是什么?
- 大多数这些看似相互竞争的软件包都是由 Andy Gill 编写的,并由 Ross Paterson 维护。这是否意味着这些软件包不是相互竞争而是以某种方式协同工作?Andy 和 Ross 是否认为他们自己的软件包已经过时?
- 你和我应该使用哪一个?