Hackage tiene varios paquetes para transformadores de mónadas:
- mtl : biblioteca de transformadores Monad
- transformadores : functor de hormigón y transformadores de mónada
- monads-fd : clases de mónadas , usando dependencias funcionales
- monads-tf : clases de mónadas , utilizando familias de tipos
- monadLib : una colección de transformadores de mónada.
- mtl-tf : biblioteca de transformadores de mónadas que utiliza familias de tipos.
- mmtl : biblioteca de transformadores Modular Monad
- mtlx : biblioteca de transformadores Monad con índices de tipo, que proporciona copias 'gratuitas'
- compose-trans : transformadores de mónada componibles
(y tal vez me perdí algunos)
¿Cuál usaremos?
mtl es el de la plataforma Haskell, pero sigo escuchando en reddit que no es genial.
Pero lo malo de la elección de todos modos, ¿no es solo algo bueno?
Bueno, vi cómo, por ejemplo, los autores de data-accessor tuvieron que hacer todo esto para atender solo las opciones populares:
- biblioteca data-accessor-monadLib: funciones de acceso para las mónadas de monadLib
- biblioteca data-accessor-monads-fd: use Accessor para acceder al estado en la clase monad State monads-fd
- biblioteca data-accessor-monads-tf: Utilice Accessor para acceder al estado en la familia de tipos de mónadas de estado monads-tf
- biblioteca data-accessor-mtl: use Accessor para acceder al estado en la clase mtl State monad
- biblioteca data-accessor-transformers: use Accessor para acceder al estado en la mónada de estado de los transformadores
Me imagino que si esto continúa y, por ejemplo, evolucionan varios paquetes de Arrow de la competencia, podríamos ver algo como: Spoonklink-Arrow-Transformers, Spoonklink-Arrow-MonadLib, Spoonklink-tfArrows-Transformers, Spoonklink-tfArrows-monadLib, ...
Y luego me preocupa que si se bifurca Spoonklink, Hackage se quedará sin espacio en disco. :)
Preguntas:
- ¿Por qué hay tantos paquetes de transformadores de mónadas?
- ¿Por qué mtl [se considera] poco cool?
- ¿Cuáles son las diferencias clave?
- La mayoría de estos paquetes aparentemente competidores fueron escritos por Andy Gill y son mantenidos por Ross Paterson. ¿Significa esto que estos paquetes no compiten sino que funcionan juntos de alguna manera? ¿Y Andy y Ross consideran obsoleto alguno de sus propios paquetes?
- ¿Cuál deberíamos usar tú y yo?