Actualmente estoy escribiendo un proyecto en el que hago un uso intensivo del transformador de mónada ListT
. Cuando se usan listas simples, implementar el no determinismo es muy fácil. Sin embargo, una vez que tuve que convertir mi código a ListT
, se volvió mucho más complicado .¿Cómo convertir limpiamente entre listas y transformadores de mónada ListT?
Como un simple ejemplo: convertir [a]
-ListT a
requiere realmente componer dos funciones:
conv :: (Monad m) => [a] -> ListT m a
conv = ListT . return
Aunque es simple, me sorprende que no está ya allí.
Preguntas:
- ¿Hay alguna manera mejor de manejar no determinismo donde se necesita un transformador mónada?
- ¿Existen técnicas/bibliotecas para convertir limpiamente entre listas y
ListT
?
Las razones exactas son bastante complicados, así que realmente no quieren elaborar demasiado en eso.
Sí, estoy de acuerdo en que 'conv' es una función simple. Estoy sorprendido de que todavía no esté allí. Apenas hay utilidades en el módulo 'ListT' que me hacen sentir como si reinventara la rueda. Eso es todo. – julkiewicz