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

Mat*_*ick 6 haskell cabal

我正在使用cabal下载Haskell软件包.

以下作品:

> cabal install JSON
Run Code Online (Sandbox Code Playgroud)

它获取Text.JSON

但是,这失败了:

> cabal install Data.List.Key
cabal: "Data.List.Key" is not valid syntax for a package name or package
dependency.
Run Code Online (Sandbox Code Playgroud)

这里的语法问题是什么?如何让cabal获取Data.List.Key?通常,对于名称XY的包,cabal install需要什么名称才能找到包?(我很困惑为什么cabal install JSON得到Text.JSON,而不是Foobarbaz.JSON)

mig*_*yte 12

cabal install命令使用包名称.包名称与模块名称不同.如果您查看文本包hackage页面,您会看到包名称是"text",但它会导出一个名为Data.Text的模块(以及其他模块).包可以导出任意数量的模块,包的名称和它导出的模块的名称之间不必有任何关系.

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

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