Monad reader 和函数的部分应用
Monad reader and partial application of functions
既然部分应用了函数are instances of the MonadReader
,为什么下面的代码不正确?
runReader (\x -> x + 2) 4
甚至
runReader (\x -> pure $ x + 2) 4
作为 MonadReader
的实例允许您使用 "reader operations"(local
、ask
、asks
),但是 runReader
运行 明确是 Reader
的一种类型。
例如,您可以这样做是因为 monadReaderFun
:
readerFunction :: Int -> Int
readerFunction = do
x <- ask
pure (x + 2)
但是没有必要 "run" 它,就像您使用 Reader
或 ReaderT
键入的值一样。
既然部分应用了函数are instances of the MonadReader
,为什么下面的代码不正确?
runReader (\x -> x + 2) 4
甚至
runReader (\x -> pure $ x + 2) 4
作为 MonadReader
的实例允许您使用 "reader operations"(local
、ask
、asks
),但是 runReader
运行 明确是 Reader
的一种类型。
例如,您可以这样做是因为 monadReaderFun
:
readerFunction :: Int -> Int
readerFunction = do
x <- ask
pure (x + 2)
但是没有必要 "run" 它,就像您使用 Reader
或 ReaderT
键入的值一样。