Hackage propose plusieurs packages pour les transformateurs monades:
- mtl : bibliothèque de transformateurs Monad
- transformateurs : foncteur béton et transformateurs monades
- monads-fd : classes Monad, utilisant des dépendances fonctionnelles
- monads-tf : classes Monad, utilisant des familles de types
- monadLib : une collection de transformateurs monad .
- mtl-tf : bibliothèque de transformateurs Monad utilisant des familles de types.
- mmtl : bibliothèque de transformateurs modulaires Monad
- mtlx : bibliothèque de transformateurs Monad avec index de types, fournissant des copies «gratuites».
- compose-trans : transformateurs monades composables
(et peut-être que j'en ai manqué)
Lequel utiliserons-nous?
mtl est celui de la plate-forme Haskell, mais j'entends constamment sur reddit que ce n'est pas cool.
Mais ce qui est mauvais dans le choix de toute façon, n'est-ce pas juste une bonne chose?
Eh bien, j'ai vu comment, par exemple, les auteurs de l'accès aux données ont dû faire tout cela pour répondre uniquement aux choix populaires:
- bibliothèque data-accessor-monadLib: fonctions d'accesseur pour les monades de monadLib
- bibliothèque data-accessor-monads-fd: utilisez Accessor pour accéder à l'état dans la classe de monade d'état monads-fd
- bibliothèque data-accessor-monads-tf: utilisez Accessor pour accéder à l'état dans la famille de types monades d'état monads-tf
- bibliothèque data-accessor-mtl: utilisez Accessor pour accéder à l'état dans la classe mtl State monad
- bibliothèque data-accessor-transformers: utilisez Accessor pour accéder à l'état dans les transformateurs State monad
J'imagine que si cela continue et que par exemple plusieurs packages Arrow concurrents évoluent, nous pourrions voir quelque chose comme: spoonklink-arrows-transformers, spoonklink-arrows-monadLib, spoonklink-tfArrows-transformers, spoonklink-tfArrows-monadLib, ...
Et puis je crains que si spoonklink se fourche, Hackage manquera d'espace disque. :)
Des questions:
- Pourquoi y a-t-il autant de packages de transformateurs monades?
- Pourquoi mtl [considéré] n'est-il pas cool?
- Quelles sont les principales différences?
- La plupart de ces packages apparemment concurrents ont été écrits par Andy Gill et sont maintenus par Ross Paterson. Cela signifie-t-il que ces packages ne sont pas concurrents mais fonctionnent plutôt ensemble d'une manière ou d'une autre? Et Andy et Ross considèrent-ils l'un de leurs propres packages comme obsolète?
- Lequel devrais-tu et moi utiliser?