首页 > 解决方案 > 堆栈无法解析正确的包版本

问题描述

我正在尝试grenade在 Haskell 中使用。用作stack配置工具,我有

# stack.yaml

extra-deps:
- diagrams-solve-0.1.1
- dual-tree-0.2.2
- SVGFonts-1.6.0.3
- diagrams-core-1.4.1
- diagrams-lib-1.4.2.2
- diagrams-postscript-1.4.1
- diagrams-svg-1.4.2
- Chart-diagrams-1.8.3
- hip-1.5.3.0
- singletons-2.2
- template-haskell-2.11.1.0
- th-desugar-1.6
- grenade-0.1.0

但是当我执行时stack build,它给了我以下错误

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for th-desugar-1.6:
    template-haskell-2.12.0.0 from stack configuration does not match <2.12  (latest
                              matching version is 2.11.1.0)
needed due to Brain-0.1.0.0 -> th-desugar-1.6

Some different approaches to resolving this:

  * Set 'allow-newer: true' to ignore all version constraints and build anyway.

  * Consider trying 'stack solver', which uses the cabal-install solver to attempt to
    find some working build configuration. This can be convenient when dealing with
    many complicated constraint errors, but results may be unpredictable.

  * Recommended action: try adding the following to your extra-deps
    in [Project directory]/stack.yaml:

- template-haskell-2.11.1.0

Plan construction failed.

即使我放- template-haskell-2.11.1.0之前diagrams-solve,堆栈仍然给我同样的错误。允许较新的版本是不可行的,因为它会破坏th-desugar

标签: haskellhaskell-stacktemplate-haskell

解决方案


这看起来像很多额外的部门。我建议先找出一个好的解析器。最好的方法是使用原始仓库:

git clone git@github.com:HuwCampbell/grenade.git
cd grenade
stack init

这为您提供以下输出:

Looking for .cabal or package.yaml files to use to init the project.
Using cabal packages:
- ./
- examples/

Selecting the best among 13 snapshots...

* Partially matches lts-11.13
    criterion version 1.3.0.0 found
        - grenade requires ==1.1.*

Downloaded nightly-2018-06-16 build plan.    
* Partially matches nightly-2018-06-16
    criterion version 1.4.1.0 found
        - grenade requires ==1.1.*
    hmatrix version 0.19.0.0 found
        - grenade requires ==0.18.*
        - grenade-examples requires ==0.18.*
    singletons version 2.4.1 found
        - grenade requires >=2.1 && <2.4

* Partially matches lts-10.10
    criterion version 1.2.6.0 found
        - grenade requires ==1.1.*

Downloaded lts-9.21 build plan.    
* Matches lts-9.21

Selected resolver: lts-9.21
Initialising configuration using resolver: lts-9.21
Total number of user packages considered: 2
Writing configuration to file: stack.yaml
All done.

所以使用基础解析器lts-9.21。我会在 repo 上打开一个问题,grenade将其添加到堆栈中。


推荐阅读