Hackage - ReaderT 的 MonadReader 实现在哪里定义?
Hackage - Where is the MonadReader implementation for ReaderT defined?
我似乎无法找到定义两个相对简单的 Haskell 方法的位置。
大约 ReaderT
。我正在按照 MonadReader
合同的要求寻找 ask
和 local
的实现。
在 https://hackage.haskell.org/package/mtl-2.1.2/docs/src/Control-Monad-Reader-Class.html#ask 我读到:
instance Monad m => MonadReader r (ReaderT r m) where
ask = ReaderT.ask
local = ReaderT.local
但是我在任何地方都找不到 ReaderT.ask
和 ReaderT.local
。
第一次翻阅Hackage发现没有实现
我是不是漏掉了什么?
该文件包含导入语句
import qualified Control.Monad.Trans.Reader as ReaderT (ask, local, reader)
so ReaderT.ask
等参考 that module,来自 transformers-0.3.0.0
包([=13= 的唯一列出的依赖项)。如果你查看主 Hackage 页面您可能会注意到每个包都不是这两个包的最新版本。)
一般来说,transformers
和mtl
定义了很多同名函数,只是transformers
版本只对直接实现相关效果的transformer类型起作用,而mtl
使用 Monad*
class 系统使它们可以自动提升到其他包裹变压器的方法。
对于直接实现的转换器,就像您的情况一样,mtl
中使用的特定方法实例通常只是引用相应的 transformer
函数。
我似乎无法找到定义两个相对简单的 Haskell 方法的位置。
大约 ReaderT
。我正在按照 MonadReader
合同的要求寻找 ask
和 local
的实现。
在 https://hackage.haskell.org/package/mtl-2.1.2/docs/src/Control-Monad-Reader-Class.html#ask 我读到:
instance Monad m => MonadReader r (ReaderT r m) where
ask = ReaderT.ask
local = ReaderT.local
但是我在任何地方都找不到 ReaderT.ask
和 ReaderT.local
。
第一次翻阅Hackage发现没有实现
我是不是漏掉了什么?
该文件包含导入语句
import qualified Control.Monad.Trans.Reader as ReaderT (ask, local, reader)
so ReaderT.ask
等参考 that module,来自 transformers-0.3.0.0
包([=13= 的唯一列出的依赖项)。如果你查看主 Hackage 页面您可能会注意到每个包都不是这两个包的最新版本。)
一般来说,transformers
和mtl
定义了很多同名函数,只是transformers
版本只对直接实现相关效果的transformer类型起作用,而mtl
使用 Monad*
class 系统使它们可以自动提升到其他包裹变压器的方法。
对于直接实现的转换器,就像您的情况一样,mtl
中使用的特定方法实例通常只是引用相应的 transformer
函数。