Hackage には、モナド変換子用のパッケージがいくつかあります。
- mtl : モナド変換ライブラリ
- トランスフォーマー: 具体的なファンクターとモナドのトランスフォーマー
- monads-fd : 機能依存関係を使用するモナドクラス
- monads-tf : 型ファミリーを使用したモナドクラス
- monadLib : モナド変換子のコレクション。
- mtl-tf : 型ファミリーを使用したモナド変換ライブラリ。
- mmtl : Modular Monad Transformer ライブラリ
- mtlx : 型インデックスを持つ Monad 変換ライブラリで、「無料」のコピーを提供します。
- compose-trans : 構成可能なモナド変換子
(そして多分私はいくつかを逃した)
どちらを使用しましょうか。
mtl は Haskell Platform のものですが、reddit ではクールではないという声をよく耳にします。
しかし、とにかく選択の何が悪いのか、それは良いことだけではありませんか?
たとえば、 data-accessor の作成者が、一般的な選択肢だけに対応するために、これらすべてを作成する必要があることを見てきました。
- data-accessor-monadLib ライブラリ: monadLib のモナドのアクセサ関数
- data-accessor-monads-fd ライブラリ: Accessor を使用して monads-fd State モナド クラスの状態にアクセスします
- data-accessor-monads-tf ライブラリ: Accessor を使用して monads-tf State モナド型ファミリの状態にアクセスします
- data-accessor-mtl ライブラリ: Accessor を使用して mtl State モナド クラスの状態にアクセスします
- data-accessor-transformers ライブラリ: Accessor を使用して変換器の状態にアクセスする State モナド
これが続けば、たとえばいくつかの競合する Arrow パッケージが進化すると、次のようなものが表示されるのではないかと想像します。
そして、spoonklink が fork されると、Hackage がディスク容量を使い果たしてしまうのではないかと心配しています。:)
質問:
- モナド変換パッケージがこれほど多いのはなぜですか?
- mtl がクールでないのはなぜですか?
- 主な違いは何ですか?
- これらの一見競合するパッケージのほとんどは、Andy Gill によって作成され、Ross Paterson によって保守されています。これは、これらのパッケージが競合するのではなく、何らかの形で連携するということですか? Andy と Ross は、独自のパッケージのいずれかを時代遅れと見なしていますか?
- あなたと私はどちらを使うべきですか?