gpt4 book ai didi

haskell - Stack 的 package.yaml 与 stack.yaml

转载 作者:行者123 更新时间:2023-12-02 06:49:23 24 4
gpt4 key购买 nike

Stack已支持hpackpackage.yaml 配置文件至少从 this commit 开始据我所知,但没有太多关于它与 stack.yaml 文件之间差异的文档。

我发现的少数几个谈论它的链接之一是 this documentation ,其中写着:

package.yaml is a file format supported by hpack. It adds some niceties on top of cabal. For example, hpack has YAML syntax support and will automatically generate of exposed-modules lists. However, it's just a frontend to cabal package files.

由此可见,package.yaml 提供了 *.cabal 文件配置能力的超集,就像 stack.yaml 一样。 > 文件也是如此。

<小时/>

documentation here暗示 stack.yaml 是配置文件:

Next, let's look at our stack.yaml file, which gives our project-level settings.

... and later says package.yaml 用于存储依赖项:

To tell stack to use text, you need to add it to your package.yaml file — specifically in your dependencies section...

this related question ,但遗憾的是它没有阐明这两个文件之间的区别。

我一直使用 package.yaml 进行我的所有项目配置,但从未使用 stack.yaml

<小时/>

那么,stack的package.yamlstack.yaml文件之间有什么关系呢?如果/当他们的职责重叠时,使用哪种做法更好?

最佳答案

So from this, it seems like package.yaml provides a superset of the *.cabal file's configuration ability, like the stack.yaml file also does.

stack.yaml 不提供 *.cabal 配置的超集。

<小时/>

*.cabal 文件是包级配置。它可以由 hpackpackage.yaml 生成。此配置提供有关包的基本信息:依赖项、导出的组件(库、可执行文件、测试套件)以及构建过程的设置(预处理器、自定义 Setup.hs)。许多项目也不使用 hpack,也没有 package.yaml,只有 *.cabal 文件。

stack.yaml 文件是项目级配置,它指定特定的环境以使构建可重现,并固定编译器和依赖项的版本。这通常由解析器指定(例如 lts-11.4)。

stack.yamlpackage.yaml 并不冗余。 package.yaml 指定需要哪些依赖项。 stack.yaml 表示一致解决依赖关系的一种方法(特定包版本和/或从哪里获取它,例如:在 Hackage、远程存储库或本地目录上)。

stack.yaml 对开发人员来说最有用:我们不希望我们的构建突然中断,因为在处理另一个项目时升级了依赖项,因此我们使用 stack.yaml 固定所有内容。该文件对于可能有外部约束的用户来说不太有用(通常,版本已经由某些发行版修复)。

  • 在许多情况下,只需在 stack.yaml 中指定解析器就足够了。因此,新的 stack 用户通常不需要担心配置 stack.yaml

  • 解析器指定一组具有特定版本的精选包(标准版本在 stackage.org 上列出)。如果所选解析器中缺少包的依赖项,则必须将其列在 stack.yamlextra-deps 字段中。

  • 一个项目可以跨越多个包,从而将其添加到 stack.yamlpackages 字段中,以便可以在单个公共(public)环境中构建它们并相互依赖。

  • 另一个常见用例是创建许多 stack.yaml(具有不同的名称)以轻松测试各种配置(例如 GHC 版本或包标志)。

    <

关于haskell - Stack 的 package.yaml 与 stack.yaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49774055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com