从 Haskell 个软件包中学习

Learning from Haskell Packages

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

我通常在 https://hackage.haskell.org/package/nameOfPackage 上在线查找 Hackage 包的文档。它有(除非损坏,唉,不幸的是)链接到每个模块的文档,以及指向其中源代码的链接。

编辑损坏的文档:

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

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

see any documentation

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

read the code in the package

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

play with it in GHCi

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

see what the module names are

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