使用Stack(Haskell)时嵌套的git依赖项



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

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

堆栈似乎仍然需要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

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

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

Stack遵循基于快照的包管理模型,这意味着它有一些"全球";指定的一组包(固定版本(,您可以使用。在Stack的情况下,这组包被称为Stackage。核心思想是要有一套明确指定的软件包供您使用。

所以简短的答案是否定的——它自己无法解决,你必须手工添加。

但是!您只需要指定不在快照中的包。例如,包lib-a可能主要依赖于Haskell中常用的包(例如,baseaeson…(,并且这些包将已经在Stackage中。因此,即使项目增长,您也只需添加";几个";参考数字。

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

最新更新