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

时间:2015-08-18 09:37:58

标签: haskell ghci

我的具体问题是:我在一个大的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. 查询Data.EitherR errors,其中指向包ghc-pkg list errors
  4. errors-1.4.7提供{{1}}
  5. 浏览hackage到该版本的错误包的文档:hayoo
  6. 有没有更好的方法来做到这一点,从更精确的意义上讲(步骤3不是),而且不那么乏味?

2 个答案:

答案 0 :(得分:7)

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

  1. 启动GHCi
  2. :load YourModule.hs,获取价值<{1}}
  3. 将给定的模块名称与:info一起使用。
  4. 您现在知道确切的模块,包和版本。
  5. 这仍然迫使您检查hackage文档。但是,如果您将ghc-pkg find-module添加到您的cabal配置或documentation: true,cabal将在安装给定包期间自动构建文档。然后你可以将程序缩短到

    1. 启动GHCi
    2. --enable-documentation,获取价值<{1}}
    3. 查看本地文档以获取参考模块。
    4. 本地文档将存储在您的cabal目录中,如果您位于沙箱中,则存储在:load YourModule.hs中。

答案 1 :(得分:1)

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