我有以下樣板,我經常做,並希望消除。它看起來是這樣的:Haskell ReaderT環境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
?我如何編寫它?
任何提示/解釋,以幫助我grok單子變壓器非常讚賞。
謝謝!
我沒有時間,現在來解釋這一點,但這裏的東西:find'的'類型是'(配置 - > IO結果) - >配置IO Result'在你的榜樣,更普遍'單子M = >(r - > ma) - > ReaderT rma'。您可以將其定義爲'find = ask> => lift'。 – Miikka