【问题标题】:Learning from Haskell Packages从 Haskell 包中学习
【发布时间】:2015-07-23 14:49:25
【问题描述】:

所以我一直在使用 Cabal 在 Haskell 中安装软件包。我看不到其中大多数的任何文档(通常),并且有人告诉我,学习 haskell 的最佳方法之一就是阅读包中的代码,弄清楚它的作用,然后玩它在 GHCi 什么的。但是你怎么做呢?将这些包安装到沙箱或其他东西后,我什至看不到模块名称是什么,更不用说它们的源代码了 - 我如何找到这些信息?

【问题讨论】:

  • 我通常去 hackage 并阅读那里每个包的文档。例如,如果您 cabal install lens,则只需访问 hackage.haskell.org/package/lens 以查看最新版本的文档,您可以随时将版本切换回您安装的版本。
  • @bheklilr 糟糕,发帖前没有看到您的评论。

标签: haskell package cabal


【解决方案1】:

我通常在https://hackage.haskell.org/package/nameOfPackage 在线查找 Hackage 包的文档。它有(除非坏了,很可惜)每个模块的文档链接,以及其中的源代码链接。

编辑损坏的文档:

不幸的是,Hackage 的文档构建系统有时会因任何原因而失败,通常会导致模块列表只是没有链接的纯文本。在这种情况下,一个好主意是查看旧包版本的链接列表:通常其中一个可以工作。

还有一个问题是一些库根本没有很好的文档记录,在这种情况下,你得到的只是类型声明、类型签名和到源的链接。 (但请查看软件包首页上是否有指向其他文档的链接。)

【讨论】:

  • bheklilr 在 cmets 中给出的示例看起来像是一组非常有用的文档。我一直在尝试使用gloss,但几乎没有描述,也没有指向模块的链接——这只是运气不好的问题,还是我遗漏了什么?
  • @DanielLittlewood 运气不好,也就是一个损坏的文档构建。 this slightly older version works。我会稍微修改一下我的答案。
【解决方案2】:

查看任何文档

cabal haddock 命令将为您构建文档并将其放置在dist/doc 中。如果您使用--enable-documentation(或在~/.cabal/config 中设置documentation: True),cabal install 还将为您在~/.cabal/share/doc 中的所有包编译文档。您可能还想使用--hyperlink-source 或在~/.cabal/config 的haddock 部分设置hyperlink-source: True。

阅读包中的代码

你可以cabal unpack一个包来获取源码。对于 foo 版本 x.y 的包,默认情况下源将放在名为 foo-x.y 的目录中。

在 GHCi 中使用它

获得包源后,您可以导航到该目录并运行 cabal repl 以获取加载了所有包模块的 ghci 实例。

查看模块名称是什么

cabal info 的 Modules: 部分在这里会很有趣。安装软件包后,您还可以使用ghc-pkg describe 来获得类似的功能。 (这里的主要区别在于哪些软件包是已知的;cabal info 将知道 Hackage 上的内容/您配置 cabal 使用的任何软件包存储库,即使该软件包尚未安装,而 ghc-pkg 会知道关于您已安装的任何软件包,即使该软件包并非来自 Hackage。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2014-02-11
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多