У меня есть следующий шаблон, который я делаю довольно часто и хотел бы устранить. Это выглядит примерно так:Haskell ReaderT Env Конфигурация IO
type Configured = ReaderT Config
doSomething :: Configured IO Data
doSomething = do
getMeta <- asks getMetaData
meta <- liftIO getMeta
я хотел бы уменьшить, что-то вроде этого:
doSomething = do
meta <- find getMetaData
К сожалению, я не полностью обернутый свой ум вокруг монада трансформаторов пока. Какой тип find
? Это (Config -> IO Result) -> Result
? Как мне написать?
Любые советы/объяснения, которые помогут мне преобразовать трансформаторы монады, очень ценятся.
Спасибо!
У меня нет времени прямо сейчас, чтобы объяснить это, но вот что-то: тип 'find' is' (Config -> IO Result) -> Configured IO Result' в вашем примере и в более общем плане Monad m = > (r -> ma) -> ReaderT rma'. Вы можете определить его как 'find = asks> => lift'. – Miikka