Tengo la siguiente plantilla repetitiva que hago bastante a menudo, y me gustaría eliminar. Se ve algo como esto:Haskell ReaderT Env IO estándar
type Configured = ReaderT Config
doSomething :: Configured IO Data
doSomething = do
getMeta <- asks getMetaData
meta <- liftIO getMeta
me gustaría que para reducir a algo como esto:
doSomething = do
meta <- find getMetaData
Por desgracia, no he envuelto completamente alrededor de mi mente transformadores monad todavía. ¿Cuál es el tipo de find
? ¿Es (Config -> IO Result) -> Result
? ¿Cómo lo escribo?
Cualquier consejo/explicación para ayudarme a comprender los transformadores de mónada son muy apreciados.
Gracias!
No tengo tiempo ahora para explicar esto, pero hay algo: el tipo de 'encontrar' es' (Config -> Resultado IO) -> Resultado IO configurado 'en su ejemplo y más generalmente 'Monad m = > (r -> ma) -> ReaderT rma'. Puede definirlo como 'find = asks> => lift'. – Miikka