Ho la seguente etichetta che faccio abbastanza spesso e vorrei eliminare. Sembra qualcosa di simile:Haskell ReaderT Env IO boilerplate
type Configured = ReaderT Config
doSomething :: Configured IO Data
doSomething = do
getMeta <- asks getMetaData
meta <- liftIO getMeta
mi piacerebbe ridurre tale a qualcosa di simile:
doSomething = do
meta <- find getMetaData
Purtroppo, non ho completamente avvolto la mia mente intorno trasformatori monade ancora. Qual è il tipo di find
? È (Config -> IO Result) -> Result
? Come lo scrivo?
Eventuali suggerimenti/spiegazioni per aiutarmi a convincere i trasformatori monad sono molto apprezzati.
Grazie!
Non ho tempo per spiegare questo, ma ecco qualcosa: il tipo di 'find' è' (Config -> Risultato IO) -> Risultato IO configurato 'nell'esempio e più in generale 'Monad m = > (r -> ma) -> ReaderT rma'. Puoi definirlo come 'find = asks> => lift'. – Miikka