所以我被告知(->) r
是 Reader monad 的一个实例,但我似乎找不到任何具体的例子来说明它应该如何工作。我想使用它而不必在阅读器中显式包装我的一些代码
import Control.Monad.Reader
testOne :: Reader String String
testOne = do
env <- ask
return $ "Hello, " ++ env
testTwo :: String -> String
testTwo = do
env <- ask
return $ "G'day, " ++ env
运行runReader testOne "there"
正常,但运行runReader testTwo "mate"
失败并显示以下消息:
Couldn't match type ‘String -> String’
with ‘ReaderT [Char] Data.Functor.Identity.Identity a’
Expected type: Reader [Char] a
Actual type: String -> String
那么我在这里错过了什么?