【问题标题】:Find the package a Haskell module belongs to查找 Haskell 模块所属的包
【发布时间】:2021-03-11 13:12:42
【问题描述】:

我是 Haskell 堆栈的新手,想知道如何找出包含特定模块的包的名称。

目前,我想使用 Data.Tuple.Extra(fst3) ( https://hackage.haskell.org/package/extra-1.7.9/docs/Data-Tuple-Extra.html ) 并想知道我应该在下面写什么

    $ stack install ????

我已经安装了tuple 包,但是,它似乎不包含Extra 部分。

到目前为止,我发现的所有有关安装包的 Internet 资源都说“要使用 Blahblah.Anything.Something,您需要安装 foofoo 包”。 . .一个人怎么知道?我搜索了 Stackage,但它只显示了 Data.Tuple.Extra 的文档,我仍然找不到包的名称。

编辑:正如K.A.Buhr 在她/他的回答中所说,stack install 是上述情况的错误命令。请改用stack build

【问题讨论】:

  • URL 包含包名:extra。在网页上,您还可以在标题中找到包名称:extra-1.7.9: Extra functions I use.1.7.9 是版本号。 “我使用的额外功能。”是包的概要。
  • stack install 用于安装二进制文件,而不是库。您想创建一个堆栈项目并将extra 添加到您的依赖项中。
  • @sjakobi 谢谢!这正是我一直在寻找的。 (是不是太晦涩难懂了?靠自己几乎是不可能发现的。)
  • @Mark Seemann 只有。我能够在您链接的主题中找到我的问题的答案只是因为我在阅读了 sjakobi 的答案后阅读了它。我的问题要简单得多(“堆栈安装”的包名称是什么?)因此答案更加具体和简单。如果这里的帖子不存在,我想我会对你链接的帖子感到困惑。

标签: haskell haskell-stack hackage


【解决方案1】:

Hackage 中浏览包文档时,页面标题的左上角部分将始终给出包、版本号和描述。在page you link,它在这里:

您还可以使用右上角的“目录”链接转到 extra 包的主页,其中提供了完整的模块列表、许可、包主页链接和错误跟踪器,等等。

附带说明,stack install extra 在技术上是“安装”此软件包的错误命令。如果你想让extra 包在 Stack 全局项目中可用,正确的命令是stack build extra。如果您想在堆栈项目中使用extra,那么您需要将extra 添加到包的xxx.cabalpackage.yaml 文件中的依赖项中,然后运行stack build(无参数)来构建和安装它用于您的项目。

相比之下,stack install 命令等效于stack build --copy-bins,它将包中的所有可执行文件复制到~/.local/bin,因此它们会在您的路径中。请参阅Stack docs。它旨在用于安装用 Haskell 编写并通过 Stack 分发的程序,因此您可以执行 stack install hlint 来安装 hlint 短绒,例如。

在这种情况下,因为 extra 包没有可执行文件,stack install extrastack build extra 会做同样的事情,但最好养成使用 stack build 的习惯,当你不打算这样做时安装任何软件包二进制文件,以避免意外。

【讨论】: