Stack.yaml vs package.yaml 添加依赖项

Stack.yaml vs package.yaml for adding dependencies

可能是个愚蠢的问题:

Stack documentation 提到 package.yaml 是添加依赖项的正确位置,但我在项目目录中看到的只是一个 stack.yaml 文件;那是那个地方吗?

(我看到一个 询问这两个文件之间的冗余,但我根本没有看到 package.yaml 文件!!)

如果有帮助:

$ stack --version
Version 1.9.3, Git revision 40cf7b37526b86d1676da82167ea8758a854953b (6211 commits) x86_64 hpack-0.31.1

没关系,原来我有运行stack new <project> simple;如果我有 运行 stack new <project> new-project,它会生成 package.yaml 文件而不是我目前在那里找到的 <project>.cabal 文件。

package.yaml实际上是由hpack处理的;它不是 stack 特性,除非它在你的项目中看到一个特性,它会使用它并生成一个 .cabal 文件.

您可以从头开始自己创建一个 package.yaml。您不需要做 stack new 或其他任何事情。

我当然觉得用package.yamlproject.cabal方便。没有很好的用户指南,因此(如 hpack README 中指出的那样)但是几个例子,你会意识到它并不多:

我看到一些人提到 Cabal 库现在支持新功能以减少乏味的重复(也许是 >= 2.x 格式?)这可能会使需要 package.yaml 尽快消失,这很好。

通常 package.yaml 是添加依赖项的正确位置,stack.yaml 是添加有关这些依赖项的附加信息的正确位置。

如果您只是使用项目主堆栈快照中的包并为所有这些包使用默认构建设置:您通常根本不需要编辑 stack.yamlstack.yaml when:

中提到依赖项
  • 包不在堆栈快照中
  • 您需要不同于您的堆栈快照提供的包版本
  • 软件包(或您需要的特定版本)根本不在黑客攻击中(例如:您需要堆栈才能从 github 获取它)
  • 您需要使用非默认标志编译包
  • 等等