堆栈 1.5.1 的自定义快照

Custom snapshots with stack 1.5.1

我从 stack-1.4.0 升级到 stack-1.5.1,突然它开始拒绝我的 stack.yaml 自定义快照。这是 stack.yaml:

的开头
resolver:
  name: integer-simple-snapshot
  location: deps/flaw/integer-simple-snapshot.yaml

...

因此它使用位于子目录中的自定义快照文件,其中包含以下解析器:

resolver: lts-9.0

现在,当我尝试构建任何东西时,堆栈会打印以下内容:

Could not parse '<path to project>/stack.yaml':
Aeson exception:
Error in $.resolver: failed to parse field 'resolver': expected ResolverWith (), encountered Object
See http://docs.haskellstack.org/en/stable/yaml_configuration/

我尝试使用非对象解析器,如 resolver: "deps/flaw/integer-simple-snapshot.yaml" 和其他对象和非对象变体,但我所能得到的只是关于错误格式的各种神秘错误。

我在 http://docs.haskellstack.org/en/stable/yaml_configuration/, and the page https://docs.haskellstack.org/en/stable/custom_snapshot/ 处看到解析器的格式没有任何变化,仍然包含自定义快照的示例。我还查看了更新日志,但没有发现任何与快照或解析器格式相关的内容。

在堆栈升级之前,使用这些文件可以完美地构建项目。发生了什么变化?我现在如何使用自定义快照?

如果重要的话,我使用标准 stack 包中的 Arch Linux 和 stack-1.5.1。

可扩展快照功能一直是一项实验性功能,但我认为它正在稳定下来。请参阅此博客 post 了解更改 - https://www.fpcomplete.com/blog/2017/07/stacks-new-extensible-snapshots

编辑:实际上,该博客post 中的更改尚未发布。 arch 是否有可能发布 stack 的 master 版本?那会很有趣.. "stack --version" 说什么?

虽然没有明确提及,但我认为它放弃了对解析器使用对象,因为 "name" 字段不是很有用。所以现在只是

resolver: deps/flaw/integer-simple-snapshot.yaml

将来,当它们依赖于新功能时,我们可能应该尝试在配置中要求 "require-stack-version: ..."。为了让用户更清楚,添加

可能会有所帮助

require-stack-version: ">= 1.5"

到您的配置