Stack如何决定依赖关系?

时间:2018-10-18 16:36:31

标签: haskell haskell-stack

我刚刚制作了a fork来修复html-conduit中的错误,该错误是我的模板库所依赖的。我维护了一个依赖于该模板库的应用。

所以,我updated my library's stack.yaml指向叉子:

extra-deps:
  [...]
  - git: https://github.com/emhoracek/xml.git
    commit: 3e1bd12882d7c452d76e39e1db1b95577f38d4d7
    subdirs:
       - xml-conduit
       - html-conduit

并编写了一个测试,以确保更新该依赖关系可以修复该错误。它做了!是的。

然后我更新了我的应用程序以指向更新的模板库:

packages:
  [...]
  - location:
      git: https://github.com/positiondev/larceny
      commit: ba743c58ff4ac2606f67336e5e557deacb416ed8
    extra-dep: true

我检查以确保此错误已修复我应用中的错误,但没有。直到我将html-conduit的分叉添加到应用程序的ExtraDeps之前,它仍然存在错误。

这是怎么回事?在决定我的应用应使用哪个版本时,为什么Stack不使用我在库的html-conduit中指定的stack.yaml版本?

1 个答案:

答案 0 :(得分:2)

任何stack命令仅引用一个stack.yaml文件-该文件位于当前目录或某个父目录中。您所依赖的库不需要具有stack.yaml文件,并且如果存在则将被忽略。

这使版本规范保持简单。对于两个stack.yaml文件要求同一个库的不同版本的情况,没有任何规则可以处理,因为没有内部版本可以查询两个stack.yaml文件。

另一方面,将查询每个库的.cabal文件,因此,如果某些.cabal文件需要一个stack.yaml的库,则会在构建初期出现错误。未指定版本,或者.cabal中的版本边界与stack.yaml中的特定版本不匹配。