2011-09-14 37 views
6

我正在使用cabal下载Haskell软件包。Hackage软件包名称如何映射到'cabal install'名称?

以下工作:

> 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)

+3

使用的名称就是包装上的名称。对于你的情况'cabal install utility-ht'应该可以正常工作。 http://hackage.haskell.org/package/utility-ht-0.0.7 – is7s

+2

我觉得困惑的是什么哈斯克尔称之为**模块名**或多或少一样什么的Java(也许其他语言)调用**包名称**。 Haskell模块就像一个Java包,而Haskell包更像Java世界称为库或项目的东西。 – MatrixFrog

+0

@MatrixFrog - 是的,那让我感到困惑。谢谢! –

回答

12

cabal install命令使用软件包名称。包名称与模块名称不同。如果你看看hackage page for the text package,你会发现包名是“text”,但它会导出一个名为Data.Text的模块(等等)。软件包可以导出任意数量的模块,并且软件包的名称和它导出的模块的名称之间不必有任何关系。

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

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

+1

此外,使用'site:hackage.haskell.org'的普通Google搜索通常在查找软件包方面做得不错。 (尽管归功于PageRank,它倾向于将您引导至较旧版本的软件包)。 – hammar