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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查找Haskell名称的包,版本和文档相关的知识,希望对你有一定的参考价值。

我的具体问题是:我在一个大的Haskell项目中遇到了throwT中的Module.hs这个名字。我想知道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 errorserrors-1.4.7
  5. 浏览hackage到该版本的错误包的文档:throwT

是否有更好的方法来做到这一点,从更精确的意义上讲(步骤3不是),而且不那么乏味?

答案

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

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

这仍然迫使您检查hackage文档。但是,如果将documentation: true添加到cabal配置或--enable-documentation中,cabal将在安装给定包期间自动构建文档。然后你可以缩短程序

  1. 点燃GHCi
  2. :load YourModule.hs,得到你的价值:info
  3. 查看本地文档以获取参考模块。

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

另一答案

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

以上是关于如何查找Haskell名称的包,版本和文档的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Haskell 中查找程序的内存使用情况

如何在 Haskell 中查找和修复由于 GC 导致的性能问题?

如何以编程方式查找 Android 版本名称?

如何查找当前打开的 MS Office 文档的名称?

使用 Intent.ACTION_PACKAGE_REMOVED 时如何查找已卸载的包名

从搜索文档中查找最小片段的算法?