Hackage包名如何映射到'cabal install'名称?

时间:2011-09-14 20:03:31

标签: haskell cabal

我正在使用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)

2 个答案:

答案 0 :(得分:12)

cabal install命令使用包名称。包名称与模块名称不同。如果查看hackage page for the text package,您将看到包名称为“text”,但它会导出名为Data.Text的模块(以及其他模块)。包可以导出任意数量的模块,包的名称和它导出的模块的名称之间不必有任何关系。

如果您知道所需的软件包,但不知道导出的模块,请查看该软件包的hackage页面。为此,我在浏览器中转到“http://hackage.haskell.org/package/”。我已经去过那么多次了,它很快就会自动完成,然后我将包名添加到该URL的末尾。如果我不知道确切的包名,那么我只需转到该页面并在包列表中搜索我想要的内容。

相反的情况,你知道你想要什么模块,但不知道什么包提供它更困难。在这种情况下,我依赖于两个精彩的Haskell搜索引擎:HoogleHayoo

答案 1 :(得分:1)

包可以包含多个模块。没有关于模块名称如何映射到程序包名称的规则。

如果您知道模块名称并想找到它所在的软件包,请浏览它的hackage文档。

模块说明的网址包含package部分后面的软件包名称,例如Linear.Quaterion的网址是

http://hackage.haskell.org/package/ linear-1.21.1 /docs/Linear-Quaternion.html

在该页面上,软件包名称也显示在左上角。

如果知道软件包名称,则可以查询其中包含哪些模块

cabal info <package name>