Hackage - ReaderT的MonadReader实现定义在哪里?

时间:2015-07-15 17:41:31

标签: haskell monad-transformers hackage

我似乎无法找到定义两个相对简单的Haskell方法的位置。

关于ReaderT。我正在根据ask合同的要求寻找localMonadReader的实施。

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.askReaderT.local

这是第一次通过阅读Hackage找不到任何实现。

我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

该文件包含import语句

sample_string = "00990099"
some_method(sample_string, "9") 
=> ["00"]

sample_string = "00XXX00XX0X00X00"
some_method(sample_string, "X")
=> ["00", "0", "00"]

所以import qualified Control.Monad.Trans.Reader as ReaderT (ask, local, reader) 等来自ReaderT.ask包中的that moduletransformers-0.3.0.0唯一列出的依赖项。如果您查看每个包的主要Hackage页面您可能会注意到这些不是任何一个软件包的最新版本。)

通常,mtl-2.1.2transformers定义了许多相同名称的函数,除了mtl版本仅适用于直接实现相关效果的转换器类型,而{{1使用transformers类系统使它们成为可以自动升级到其他包装变换器的方法。

对于直接实现变换器,就像你的情况一样,mtl中使用的特定方法实例通常只是引用相应的Monad*函数。