O Hackage tem vários pacotes para transformadores monad:
- mtl : Biblioteca do transformador Monad
- transformadores : functor de concreto e transformadores monad
- monads-fd : classes Monad, usando dependências funcionais
- monads-tf : classes Monad, usando famílias de tipo
- monadLib : uma coleção de transformadores monad.
- mtl-tf : Biblioteca de transformadores Monad usando famílias de tipos.
- mmtl : Biblioteca de transformador Modular Monad
- mtlx : Biblioteca do transformador Monad com índices de tipo, fornecendo cópias 'gratuitas'.
- compose-trans : transformadores monádicos composíveis
(e talvez eu tenha perdido alguns)
Qual devemos usar?
mtl é aquele na plataforma Haskell, mas eu continuo ouvindo no reddit que não é legal.
Mas o que há de ruim na escolha, não é apenas uma coisa boa?
Bem, eu vi como, por exemplo, os autores do data-accessor tiveram que fazer tudo isso para atender apenas às escolhas populares:
- Biblioteca data-accessor-monadLib: funções de acesso para mônadas do monadLib
- Data-accessor-monads-fd library: use Accessor para acessar o estado na classe monads-fd State monad
- Data-accessor-monads-tf library: use o Accessor para acessar o estado na família do tipo monads-tf State monad
- biblioteca data-accessor-mtl: use o Accessor para acessar o estado na classe mtl State monad
- Data-accessor-transformers library: Use Accessor para acessar o estado em transformadores State monad
Eu imagino que se isso continuar e, por exemplo, vários pacotes concorrentes de Arrow evoluírem, poderemos ver algo como: spoiler-arrow-transformers, spoiler-flechas-monadLib, spoiler-tfArrows-transformers, spoiler-tfArrows-monadLib, ...
E então me preocupo que, se o spoiler do link for bifurcado, o Hackage ficará sem espaço em disco. :)
Questões:
- Por que existem tantos pacotes de transformadores monad?
- Por que o mtl [considerado] não é legal?
- Quais são as principais diferenças?
- A maioria desses pacotes aparentemente concorrentes foi escrita por Andy Gill e é mantida por Ross Paterson. Isso significa que esses pacotes não são concorrentes, mas funcionam juntos de alguma forma? E Andy e Ross consideram algum de seus próprios pacotes obsoleto?
- Qual você e eu devemos usar?