我正在使用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)
答案 0 :(得分:12)
cabal install
命令使用包名称。包名称与模块名称不同。如果查看hackage page for the text package,您将看到包名称为“text”,但它会导出名为Data.Text的模块(以及其他模块)。包可以导出任意数量的模块,包的名称和它导出的模块的名称之间不必有任何关系。
如果您知道所需的软件包,但不知道导出的模块,请查看该软件包的hackage页面。为此,我在浏览器中转到“http://hackage.haskell.org/package/”。我已经去过那么多次了,它很快就会自动完成,然后我将包名添加到该URL的末尾。如果我不知道确切的包名,那么我只需转到该页面并在包列表中搜索我想要的内容。
相反的情况,你知道你想要什么模块,但不知道什么包提供它更困难。在这种情况下,我依赖于两个精彩的Haskell搜索引擎:Hoogle和Hayoo。
答案 1 :(得分:1)
包可以包含多个模块。没有关于模块名称如何映射到程序包名称的规则。
如果您知道模块名称并想找到它所在的软件包,请浏览它的hackage文档。
模块说明的网址包含package
部分后面的软件包名称,例如Linear.Quaterion的网址是
http://hackage.haskell.org/package/
linear-1.21.1
/docs/Linear-Quaternion.html
在该页面上,软件包名称也显示在左上角。
如果知道软件包名称,则可以查询其中包含哪些模块
cabal info <package name>
。