Digamos que queremos usar ReaderT [(a,b)]
sobre la mónada Maybe
, y luego queremos hacer una búsqueda en la lista.¿Las funciones de envoltura en un transformador de mónada se deben considerar como malas prácticas?
Ahora una manera fácil, y no demasiado raro esto es:
primera posibilidad
find a = ReaderT (lookup a)
Sin embargo, parece como éste afirma algo no trivial acerca de cómo funciona el transformador ReaderT . Si miramos el código fuente de Control.Monad.Reader, queda claro que esto funciona bien. Pero no he leído ninguna documentación que respalde esto. Sin embargo, también podríamos escribir encontrar de esta manera:
segunda posibilidad
find a = do y <- ask
lift (lookup a y)
Ideas similares se aplican para envolver MaybeT
, StateT
, State
y Reader
. Normalmente escribo algo así como el primer ejemplo, pero la mayoría de las veces es muy obvio cómo escribirlo como el segundo ejemplo, y hasta podrías decir que es más legible. Entonces mi pregunta es: ¿debería el código como el primer ejemplo considerarse malo?
También puede escribir 'find a = lift. búsqueda a = << preguntar', que es tan claro (en mi humilde opinión) como la segunda opción, pero es más corto. –
o use fmap: encuentre a = fmap (busque una) pregunte = busque una <$> pregunte – urso
Es una mierda que dejen de exportar el constructor – fuz