Mam następujący szablon, który wykonuję dość często i chciałbym wyeliminować. Wygląda to mniej więcej tak:Haskell ReaderT Env IO płyta montażowa
type Configured = ReaderT Config
doSomething :: Configured IO Data
doSomething = do
getMeta <- asks getMetaData
meta <- liftIO getMeta
chciałbym zmniejszyć, że aby coś takiego:
doSomething = do
meta <- find getMetaData
Niestety, jeszcze nie całkowicie owinięty wokół mojego umysłu transformatorów monada jeszcze. Jaki jest typ find
? Czy to jest (Config -> IO Result) -> Result
? Jak mogę to napisać?
Wszelkie wskazówki/wyjaśnienia, które pomogą mi w konstruowaniu transformatorów Monok są bardzo cenione.
Dzięki!
Nie mam teraz czasu, żeby to wyjaśnić, ale oto coś: typ 'find' to' (Config -> IO Result) -> Skonfigurowany wynik IO "w twoim przykładzie i bardziej ogólnie' Monad m = > (r -> ma) -> ReaderT rma'. Możesz zdefiniować go jako 'find = ask> => lift'. – Miikka