2011-09-14 35 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