2017-05-08 27 views
1

MonadReader的實例MonadReader r (ReaderT rm)定義如下:MonadReader實例定義的是什麼意思?

instance Monad m => MonadReader r (ReaderT r m) where 
    ask = ReaderT.ask 
    local = ReaderT.local 
    reader = ReaderT.reader 
ask = ReaderT.ask

,第二問是什麼MonadReader實例?

非常感謝你:)

+2

'ReaderT.ask'是'ReaderT'的限定導入的'ask'。提到的'ask'是[this](https://hackage.haskell.org/package/transformers-0.5.4.0/docs/Control-Monad-Trans-Reader.html#v:ask)。 – Alec

回答

3

第二ask不是來自任何情況下都沒有。這是在Control.Monad.Trans.Reader(其類型爲Monad m => ReaderT r m r)中定義的正常功能。

這就像做以下幾點:

data Color = Red | Green | Blue 

myShow :: Color -> String 
myShow c = case c of 
    Red -> "(red)" 
    Green -> "(green)" 
    Blue -> "(blue)" 

instance Show Color where 
    show = myShow 

這裏myShow起着ReaderT.ask作用,作爲一個單獨的函數。