我似乎无法找到定义两个相对简单的Haskell方法的位置。
关于ReaderT
。我正在根据ask
合同的要求寻找local
和MonadReader
的实施。
在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找不到任何实现。
我错过了什么吗?
答案 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 module(transformers-0.3.0.0
唯一列出的依赖项。如果您查看每个包的主要Hackage页面您可能会注意到这些不是任何一个软件包的最新版本。)
通常,mtl-2.1.2
和transformers
定义了许多相同名称的函数,除了mtl
版本仅适用于直接实现相关效果的转换器类型,而{{1使用transformers
类系统使它们成为可以自动升级到其他包装变换器的方法。
对于直接实现变换器,就像你的情况一样,mtl
中使用的特定方法实例通常只是引用相应的Monad*
函数。