使用堆栈时嵌套 git 依赖项 (Haskell)

Nested git dependencies when using Stack (Haskell)

我有两个 Haskell 库 lib-alib-b,都托管在私人 git 存储库中。 lib-b 依赖于 lib-a,两者构建都没有问题。 现在我想将 lib-b 导入另一个项目,然后使用 git 指令将其添加到堆栈配置中,如下所示:

- git: git@github.com:dataO1/lib-b.git
  commit: deadbeef102958393127912734

Stack 似乎仍然需要 lib-a 的特定版本:

In the dependencies for application-0.1.0.0:
    lib-a needed, but the stack configuration has no specified version (no package with that name found,
            perhaps there is a typo in a package's build-depends or an omission from the stack.yaml packages
            list?)
needed due to application-0.1.0.0 -> lib-b-0.1.0.0

现在的问题是,stack 能否在不明确指定它们的情况下以某种方式找出嵌套 git 依赖项的特定版本?如果项目增长,我不想每次更新 lib-a 时都手动调整它。

旁注:我正在为所有三个堆栈项目使用 nixOS 和 nix 指令。

Stack 遵循基于快照的包管理模型,这意味着它具有一些您可以使用的“全局”指定包集(固定版本)。在 Stack 的案例中,这组包称为 Stackage。核心思想是拥有您正在使用的这组明确指定的包。

所以简短的回答是否定的,它不能自己计算出来,你必须手动添加它们。

但是!您只需要指定不在快照中的包。例如包 lib-a 可能主要依赖于 Haskell 中常用的包(例如 baseaeson、...)并且这些包已经在 Stackage 中。所以即使项目增长,你也只会添加“一些”git refs.

所以这通常不会成为问题。