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"(localaskasks),但是 runReader 运行 明确是 Reader 的一种类型。

例如,您可以这样做是因为 monadReaderFun:

readerFunction :: Int -> Int
readerFunction = do
  x <- ask
  pure (x + 2)

但是没有必要 "run" 它,就像您使用 ReaderReaderT 键入的值一样。