我正在使用 cabal 下载 Haskell 软件包。
以下作品:
> cabal install JSON
它获取 Text.JSON
但是,这失败了:
> cabal install Data.List.Key
cabal: "Data.List.Key" is not valid syntax for a package name or package
dependency.
这里有什么语法问题? 如何让 cabal 获取 Data.List.Key? 一般来说,对于名称为 X.Y 的包,
cabal install
需要什么名称才能找到该包? (我很困惑为什么 cabal install JSON
得到 Text.JSON,而不是 Foobarbaz.JSON)
cabal install
命令使用包名称。 包名称与模块名称不同。 如果您在 hackage 页面上查找文本包,您会看到包名称是“text”,但它导出一个名为 Data.Text 的模块(以及其他模块)。 包可以导出任意数量的模块,并且包的名称与其导出的模块的名称之间不必有任何关系。
如果您知道想要的包,但不知道导出的模块,请查看该包的 hackage 页面。 为此,我在浏览器中访问“http://hackage.haskell.org/package/”。 我已经去过那里很多次了,它很快就会自动完成,然后我将包名称添加到该网址的末尾。 如果我不知道确切的包名称,那么我只需转到该页面并在包列表中搜索我想要的内容即可。
相反的情况,你知道你想要什么模块,但不知道它提供什么包,那就有点困难了。 在这种情况下,我依赖于美妙的Haskell搜索引擎Hoogle。
(另一个Hayoo,已经离线了一段时间了。)
软件包可以包含多个模块。没有关于模块名称如何映射到包名称的规则。
如果您知道模块名称并想找到它所在的包,请浏览其 hackage 文档。
模块描述的 url 在
package
部分之后包含包名称,例如Linear.Quaterion 的 url 是
http://hackage.haskell.org/package/
linear-1.21.1
/docs/Linear-Quaternion.html
在该页面上,包名称也显示在左上角。
如果知道包名,可以查询包含哪些模块
cabal info <package name>
.