繁体   English   中英

堆栈构建工具:LTS解析器的兼容性问题

[英]Stack build tool: compatibility issue with LTS resolver

被宣传为Haskell工具的突破,我尝试从Cabal切换到Stack。 但是,我仍然无法使项目与使用cabal运行的堆栈一起运行。 我认为问题在于解析器设置的全局约束(例如,来自堆栈的长期支持软件包)不符合本地软件包的依赖性。

作为一个具体示例,我使用了0.14.0.6版中的snap框架( http://snapframework.com/ )。 snap init创建一个完整的snap项目后,我尝试从具有stack init的cabal文件实例化一个堆栈构建计划。 但是,堆栈没有找到满足约束的构建计划。 另一方面, cabal install成功构建了项目。

我对堆栈的理解有误吗? 如何解决这个问题?

完整的错误日志如下所示,其中项目名称为SnapFull:

Checking against build plan lts-3.7

* Build plan did not match your requirements:
    base version 4.8.1.0 found
    - SnapFull requires >=4 && <4.4

    lens version 4.12.3 found
    - SnapFull requires >=3.7.6 && <3.8

    snap-loader-dynamic not found
    - SnapFull requires ==0.10.*

    snap-loader-static not found
    - SnapFull requires >=0.9 && <0.10


Checking against build plan lts-2.22

* Build plan did not match your requirements:
    base version 4.7.0.2 found
    - SnapFull requires >=4 && <4.4

    lens version 4.7.0.1 found
    - SnapFull requires >=3.7.6 && <3.8

    snap-loader-dynamic not found
    - SnapFull requires ==0.10.*

    snap-loader-static not found
    - SnapFull requires >=0.9 && <0.10


Checking against build plan lts-3.8

* Build plan did not match your requirements:
    base version 4.8.1.0 found
    - SnapFull requires >=4 && <4.4

    lens version 4.12.3 found
    - SnapFull requires >=3.7.6 && <3.8

    snap-loader-dynamic not found
    - SnapFull requires ==0.10.*

    snap-loader-static not found
    - SnapFull requires >=0.9 && <0.10


Checking against build plan nightly-2015-10-09

* Build plan did not match your requirements:
    base version 4.8.1.0 found
    - SnapFull requires >=4 && <4.4

    lens version 4.12.3 found
    - SnapFull requires >=3.7.6 && <3.8

    snap-loader-dynamic not found
    - SnapFull requires ==0.10.*

    snap-loader-static not found
    - SnapFull requires >=0.9 && <0.10


There was no snapshot found that matched the package bounds in your .cabal files.
Please choose one of the following commands to get started.

    stack init --resolver lts-3.7
    stack init --resolver lts-2.22
    stack init --resolver lts-3.8
    stack init --resolver nightly-2015-10-09

You'll then need to add some extra-deps. See:

    https://github.com/commercialhaskell/stack/blob/master/doc/yaml_configuration.md#extra-deps

You can also try falling back to a dependency solver with:

    stack init --solver

我建议尝试使用非LTS求解器:

$ stack init --resolver=ghc-7.10 --force

要么

$ stack init --resolver=ghc-7.8 --force

与使用lts-*求解器相比,这通常会更容易获得工作结果,除非您不会从LTS的稳定性中受益。 但是,由于您来自Cabal,因此无论如何您之前都没有LTS,因此不妨先使用常规的ghc-7.10ghc-7.8解析器开始,看看以后是否可以使用LTS。

PS,您也可以尝试夜间活动,我想它介于lts-*ghc-*之间,但是我自己还没有尝试过。

编辑:一后stack init命令,通常还需要运行stack solver --modify-stack-yaml填充extra-deps在部分stack.yaml从计算的编译依赖build-depends在你的部分.cabal文件。 我认为正在发生的事情是, init仅使用指定的求解器配置项目,而没有调用实际的依赖项解析。 (对此信息如有任何更正,我将不胜感激。)

您的项目SnapFull要求其依赖项的版本太旧(例如base < 4.4lens < 3.8 )。 这些版本比第一个Stackage快照提供的版本要旧,这可以解释为什么堆栈无法找到构建计划。 很可能,解决问题的最简单方法是更新项目的.cabal文件,以使用这些依赖关系的最新版本。 另外, snap-loader- *软件包不在Stackage中,因此需要将它们添加到stack.yamlextra-deps字段中。 stack solver --modify-stack-yaml命令可以为您完成此任务。

PS: 此页面告诉您最新的Stackage LTS快照中包含哪些软件包和版本。 您还可以通过页面顶部的“快照”链接检查其他快照。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM