我试图弄清楚如何使用mapReader
from Control.Monad.Reader
。
例如我有这个读者单子
myReaderMonad :: Reader String Int
myReaderMonad = do
string <- ask
return (length string)
我可以这样运行
>>> runReader myReaderMonad "Saurabh"
>>> 7
现在我正在尝试检查 runReader 返回的值是否偶数。不使用mapReader
我可以这样做
>>> even $ runReader myReaderMonad "Saurabh"
>>> False
但我想通过使用mapReader
https://hackage.haskell.org/package/mtl-2.2.2/docs/Control-Monad-Reader.html#v:mapReader来做到这一点
我尝试了以下但它不工作。
>>> mapReader even myReaderMonad "Saurabh"
>>> • Couldn't match expected type ‘[Char] -> t’
with actual type ‘ReaderT
String Data.Functor.Identity.Identity Bool’
• The function ‘mapReader’ is applied to three arguments,
but its type ‘(Int -> Bool)
-> Reader String Int
-> ReaderT String Data.Functor.Identity.Identity Bool’
has only two
In the expression: mapReader even myReaderMonad "Saurabh"
In an equation for ‘it’:
it = mapReader even myReaderMonad "Saurabh"
请在这里帮助我。