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