如何查找 Haskell 名称的包、版本、文档

How to find package, version, documentation for a Haskell name

我的具体问题是:我在一个大的Haskell 项目中运行 在Module.hs 中跨过名称throwT。我想知道 throwT 的作用。我最终设法解决了这个问题,如下所示:

  1. 为项目启动 ghci
  2. :load Module.hs 后跟 :i throwT throwT :: Monad m => e -> Control.Monad.Trans.Either.EitherT e m r -- Defined in ‘Data.EitherR’
  3. 查询 hayoo for Data.EitherR,它指向包 errors
  4. ghc-pkg list errors 给出 errors-1.4.7
  5. 浏览 hackage 到该版本错误包的文档:throwT

有没有更好的方法来做到这一点,既更精确(第 3 步不是),又不那么乏味?

理想情况下,每个模块都显式导入它使用的每个函数。假设在Module.hs中使用了throwT,但没有在其中定义,首先要检查的是Module.hs顶部是否有显式导入函数的导入语句,它看起来像 import Some-Module (throwT, someOtherFunction, possiblyAnotherFunction),其中 Some-Module 是被导入的模块,括号内的函数是唯一从该模块导入的东西(这就是显式导入)。然后你会找到 Some-Module 并寻找 throwT.

的定义

您可以使用 ghc-pkg find-module 而不是 list,它会立即为您提供包含该模块的软件包的安装版本:

  1. 启动 GHCi
  2. :load YourModule.hs,获得 :info 您的价值
  3. 将给定的模块名称与 ghc-pkg find-module 一起使用。
  4. 您现在知道确切的模块、包和版本。

这仍然会迫使您查看黑客攻击文档。但是,如果您将 documentation: true 添加到您的 cabal 配置或 --enable-documentation,cabal 将在给定软件包的安装过程中自动构建文档。那么你可以将程序缩短为

  1. 启动 GHCi
  2. :load YourModule.hs,获得 :info 您的价值
  3. 查看您当地的参考资料模块文档。

本地文档将存储在您的 cabal 目录中,或者,如果您在沙箱中,则存储在 .cabal-sandbox/share/doc/<plattform>/index.html