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

时间:2019-02-17 07:57:45

标签: haskell haskell-stack

可能是一个愚蠢的问题:

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

(我看到一个existing question询问这两个文件之间的冗余性,但我什至看不到package.yaml文件!!

如果有帮助:

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

3 个答案:

答案 0 :(得分:3)

package.yaml 实际上是由 hpack 处理的;它不是 stack 功能,除非它在项目中看到一个可以使用它并生成 .cabal 文件的地方。

您可以从头开始创建 package.yaml 。您无需执行stack new或其他任何操作。

我当然使用 package.yaml 而不是 project.cabal 方便地找到它。这样的话,没有很好的用户指南(如 hpack README中所指出的),但是有一些示例,您会发现其中没有太多内容:

我已经看到一些提及, Cabal 库现在支持新功能,以减少繁琐的重复(也许采用>= 2.x格式?),这可能需要 package.yaml 很快就会消失,这很好。

答案 1 :(得分:1)

没关系,事实证明我已经跑过stack new <project> simple;如果我运行过stack new <project> new-project,它将生成package.yaml文件,而不是我当前在此处找到的<project>.cabal文件。

答案 2 :(得分:1)

通常,package.yaml是添加依赖项的正确位置,而stack.yaml是添加有关那些依赖关系的其他信息的正确位置。

如果您只是使用项目主堆栈快照中的程序包,并且使用所有程序包的默认构建设置:通常,您根本不需要编辑stack.yaml。在以下情况下,stack.yaml中提到了依赖性:

  • 该软件包不在堆栈快照中
  • 您需要与堆栈快照提供的版本不同的软件包
  • 该软件包(或所需的特定版本)完全不受黑客攻击(例如:您需要从github获取它的堆栈)
  • 您需要使用非默认标志编译软件包