一个包是否因为遗漏的依赖而被排除在 Stackage LTS 之外?

Is a package excluded from Stackage LTS because of an omitted dependency?

我对包的依赖性如何影响将其包含在 Stackage LTS 中感到有点困惑;具体来说,如果

包 A have to be excluded 来自 LTS-X.Y,特别是如果

是的,对于给定 Stackage 快照中的每个包,其所有传递依赖项也都在快照中。此外,仅当包的维护者同意在其依赖项方面保持最新时,包才会被包含在内。 the README on github. An excerpt:

中有更多详细信息
  • 所有包都可以从 Hackage 构建和测试。我们推荐 Stack Travis 脚本,它可以确保包不会意外不完整。
  • 所有包都与所有依赖项的最新版本兼容(您可以通过访问 http://packdeps.haskellers.com/feed?needle=PACKAGENAME 找到限制性上限)。
  • 快照中的所有包都与快照中使用的 GHC 附带的库版本兼容(有关宽松下限的更多信息)。

我会copy/pastemy answer on github


does package A have to be excluded?

不,不必排除。原因如下:

even if the only reason B is excluded is because of a test suite dependency

在这种情况下,我们可以将 B 添加到构建计划中并将其标记在 skipped-tests 部分下,以避免拉入其测试套件依赖项。 LTS 和夜间快照都是如此。

(但是,更可取的做法是解决 B 的依赖性问题,以便测试套件可以 运行。)


为了进一步澄清,回应@bergey 的回答:

packages are only included if the package's maintainer agrees to keep it up to date with respect to its dependencies

这仅适用于 明确 包含的包。一些包是传递依赖项,它们被隐式包含,并且不一定遵守如此严格的标准。 (但是,将来我们可能消除隐式包含的概念,而是显式地包含所有包。)

也可以创建例外,以便可以包含包,即使它的 测试套件 或其 基准测试 具有不兼容的依赖性约束与 snapsnot.

当然,首选的方法是不需要创建此类例外,我们鼓励所有维护者保持他们所有构建目标的最新状态。

最后,请允许我指出,这个问题可能更适合 the stackage mailing list,诚然,它没有得到很好的宣传或利用。