了解 Haskell 的堆栈程序以及解析器和 LTS 版本

Understanding Haskell's stack program and the resolver and LTS version

我正在尝试了解如何使用 stack and stackage.org。当我第一次安装和使用它时,stackage.org 是 LTS-3.8("resolver")。从那时起,stackage.org 现在有了 LTS-3.11。

首先,我想确认一下这是什么意思。 Stackage 是一个包存储库,其中对于特定的 LTS 版本(比如 3.8),包已经过验证可以协同工作。所以 LTS-3.8 的包一起工作,LTS-3.11 的包也一起工作。继续......

当我运行stack new projectname时,堆栈告诉我:

Checking against build plan lts-3.8
Selected resolver: lts-3.8

这是否意味着该项目已设置为仅使用在 LTS-3.8 下验证的包和版本?

如果我现在想开始一个新项目并想在新项目中使用最新的 LTS 版本,我该如何让堆栈默认执行此操作?

如果我想 "upgrade" 旧项目使用新的 LTS 版本怎么办?

Does this mean that the project has been set up to use only the packages and versions that were verified under LTS-3.8?

没错。 (如果您需要 LTS 3.8 集中未包含的软件包,您可以通过 stack.yamlextra-deps 部分指定它们。stack 将从 Hackage 获取它们并为您的项目单独安装它们,而不会影响LTS 快照或您的其他项目。)

If I now want to start a new project and want to use the latest LTS version with the new project, how do I tell stack to do that by default?

使用例如stack new projectname --resolver=lts-3.11 为新项目设置解析器。 stack 默认为您已经在使用的最新 LTS 快照,因此一旦您拥有一个包含最新 LTS 的项目,未来的新项目也会效仿。

What about if I want to "upgrade" an older project to use a new LTS version?

更改 stack.yaml 文件中的 resolver 字段。更改将在您下次构建项目时生效。