Я пытаюсь выяснить, как использовать mapReader
из 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"
Пожалуйста, помогите мне здесь.