【问题标题】:How are Hackage package names mapped to 'cabal install' names?Hackage 软件包名称如何映射到“cabal install”名称?
【发布时间】:2011-09-14 20:03:31
【问题描述】:

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

【问题讨论】:

  • 使用的名称只是 hackage 上的包名称。对于您的情况,cabal install utility-ht 应该可以正常工作。 hackage.haskell.org/package/utility-ht-0.0.7
  • 我认为混淆在于 Haskell 所称的 模块名称 与 Java(可能还有其他语言)所称的 包名称。 Haskell 模块类似于 Java 包,而 Haskell 包更像 Java 世界所称的库或项目。
  • @MatrixFrog -- 是的,这让我很困惑。谢谢!
  • 我真的希望 cabal install 使用一些启发式方法来使模块名称起作用。有很多优秀的 Haskell 教程,但是在我运行它们之前,我需要找到每个导入的包名称。这些软件包可能只为有经验的用户所知,但他们无论如何都不会阅读教程。
  • @Adam 您希望这样的启发式方法如何工作?如果您已经知道要查找的模块但不知道它在哪个包中,请使用 google 或 hayoo 快速搜索 hackage!将在 5 秒内带您到那里。如果您既不知道包名也不知道模块名称 - 好吧,如果您至少知道您正在寻找的功能,您仍然可以尝试 google 或 hayoo!。如果您也不知道这些,那么世界上没有任何启发式方法可以拯救您。

标签: haskell cabal


【解决方案1】:

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

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

相反的情况,你知道你想要什么模块但不知道什么包提供了它,这有点困难。在这种情况下,我依靠了出色的 Haskell 搜索引擎Hoogle
(另一个Hayoo,已经离线一段时间了。)

【讨论】:

  • 此外,使用 site:hackage.haskell.org 进行简单的 Google 搜索通常可以很好地找到包。 (尽管由于 PageRank 的原因,它往往会将您引导至旧版本的软件包)。
【解决方案2】:

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

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

模块描述的 url 包含 package 部分之后的包名称,例如Linear.Quaterion 的 url 是

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

在该页面上,包名称也显示在左上端。

如果知道包名,就可以查询包含了哪些模块

cabal info <package name>.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    相关资源
    最近更新 更多