Hackageには、モナド変換子用のパッケージがいくつかあります。
(そして多分私はいくつかを逃した)
どちらを使用しますか?
mtlはHaskellプラットフォームのものですが、私はredditでそれがクールではないと聞いています。
しかし、とにかく選択の何が悪いのか、それはただ良いことではありませんか?
たとえば、データアクセサの作成者は、人気のある選択肢だけに対応するために、これらすべてを作成する必要があることを知りました。
これが続き、たとえばいくつかの競合するArrowパッケージが進化すると、spoonklink-arrows-transformers、spoonklink-arrows-monadLib、spoonklink-tfArrows-transformers、spoonklink-tfArrows-monadLib、...
そして、spoonklinkがフォークされると、Hackageのディスク容量が不足するのではないかと心配しています。 :)
質問:
それらの束はほぼ完全に同等です:
mtl
はGHC拡張機能を使用しますが、transformers
はHaskell98です。monads-fd
とmonads-tf
は、それぞれ機能従属性と型族を使用するtransformers
のアドオンであり、どちらもmtl
にない機能をtransformers
に提供します。 _。mtl-tf
はmtl
型族を使用して再実装されています。つまり、本質的には、mtl
== transformers
++ monads-fd
、mtl-tf
== transformers
++ monads-tf
です。 transformers
とそれに関連するパッケージの移植性とモジュール性の向上が、最近mtl
がクールではない理由だと思います。
mmtl
とmtlx
はどちらもmtl
に類似しているか、それに基づいているようですが、APIの違いと追加機能があります。
MonadLib
は問題についてかなり異なる見方をしているようですが、私はそれを直接は知りません。また、他の拡張機能よりも多くのGHC拡張機能を使用しているようです。
一見すると、compose-trans
は、モナド変換子を作成するためのメタプログラミングのようなもののようです。 Control.Monad.Trans
と互換性があると主張しています...これはmtl
を意味すると思いますか?
とにかく、私は次の決定アルゴリズムを提案します:
transformers
&co。を使用して、mtl
を休ませてください。mtl
を使用していますか? transformers
は完全に互換性があるわけではありませんが、切り替えを行わなかったために誰もあなたを殺すことはありません。category-extras
、そして1ページ半で世界のすべての問題を解決します 今のところは?おそらくmtl
を使用する必要があります。何が起こっているのかというと、transformers
ライブラリはmonads-fd
とmonads-tf
が平和的に共存できるように、MTLから除外されていますが、最後に確認しましたが、まだそうではありませんでした。
その場合、monads-fd
とtransformers
をインポートして、State
などがStateT
のエイリアスになることを除いて、(ほぼ)同じインターフェイスを取得できます。
したがって、私はmtl
に書き込みますが、State、Readerなどがdata
sに置き換えられるため、現在type
であるという事実に依存しません。
MonadLib
は、Iavorが取り組んできたもう1つの代替手段であり、モジュール名を他のユーザーと共有しないため安全に使用できますが、使用パターンはかなり異なります。
彼の答え で言及されているEdward Kmettの因数分解は、2010年後半に完了しました。その最終結果はmonads-fdであり、 トランスフォーマー、mtlのバージョン2になります。 mtl、monads-tfの遍在性の結果として、実際には決して引っかかった。 2017年の初めの時点で、mtlとトランスフォーマーが唯一のモナドトランスフォーマーライブラリです広く使用されています。