Hackage ha diversi pacchetti per trasformatori monade:
- mtl : libreria di trasformatori Monad
- trasformatori : funtore concreto e trasformatori monade
- monads-fd : classi Monad, che utilizzano dipendenze funzionali
- monads-tf : classi Monad, utilizzando famiglie di tipi
- monadLib : una raccolta di trasformatori monade.
- mtl-tf : libreria di trasformatori Monad che utilizza famiglie di tipi.
- mmtl : libreria di trasformatori modulari Monad
- mtlx : libreria di trasformatori Monad con indici di tipo, che fornisce copie "gratuite".
- compose-trans : trasformatori monade componibili
(e forse me ne sono perso qualcuno)
Quale dovremmo usare?
mtl è quello nella piattaforma Haskell, ma continuo a sentire su reddit che non è cool.
Ma cosa c'è di male nella scelta comunque, non è solo una cosa buona?
Bene, ho visto come ad esempio gli autori di data-accessor hanno dovuto fare tutto questo per soddisfare solo le scelte popolari:
- libreria data-accessor-monadLib: funzioni accessor per le monadi monadLib
- libreria data-accessor-monads-fd: usa Accessor per accedere allo stato nella classe monads-fd State monad
- libreria data-accessor-monads-tf: utilizzare Accessor per accedere allo stato nella famiglia di tipi monade monads-tf State
- libreria data-accessor-mtl: usa Accessor per accedere allo stato nella classe monade mtl State
- libreria data-accessor-transformers: usa Accessor per accedere allo stato in transformers State monad
Immagino che se questo va avanti e ad esempio si evolvono diversi pacchetti Arrow concorrenti, potremmo vedere qualcosa come: spoonklink-frecce-transformers, spoonklink-frecce-monadLib, spoonklink-tfArrows-transformers, spoonklink-tfArrows-monadLib, ...
E poi mi preoccupo che se Spoonklink viene biforcato, Hackage esaurirà lo spazio su disco. :)
Domande:
- Perché ci sono così tanti pacchetti di trasformatori monade?
- Perché mtl [considerato] uncool?
- Quali sono le principali differenze?
- La maggior parte di questi pacchetti apparentemente concorrenti sono stati scritti da Andy Gill e sono mantenuti da Ross Paterson. Questo significa che questi pacchetti non sono in competizione ma piuttosto lavorano insieme in qualche modo? E Andy e Ross considerano obsoleto qualcuno dei loro pacchetti?
- Quale dovremmo usare io e te?