对于haskell堆栈,我无法安装Spock

时间:2019-07-28 21:16:25

标签: haskell windows-10 haskell-stack

对于Stack,当我尝试为Spock使用堆栈安装时,它会给我这个错误(请参阅下文)。

我试图自己安装每个软件包(单个软件包),但没有用。 我尝试按照Haskell Stack package installation error中的答案进行操作,但这也不起作用。

`错误:在构建构建计划时,遇到以下异常:

在Spock-0.13.0.0的依赖项中:     Spock-core必须匹配> = 0.13,但是堆栈配置没有指定的版本(最新                匹配的版本是0.13.0.0)     重新路由必须匹配> = 0.5,但堆栈配置没有指定的版本(最新匹配             版本是0.5.0.0)     stm容器必须匹配> = 0.2 && <0.3,但是堆栈配置没有指定的版本                    (最新的匹配版本是0.2.16) 因为Spock是构建目标,所以需要。

一些不同的解决方法:

  • 考虑尝试“堆栈求解器”,它使用cabal-install求解器尝试查找一些 工作版本配置。在处理许多复杂的事件时可以很方便 约束错误,但结果可能无法预测。

  • 建议采取的措施:尝试将以下内容添加到您的额外行动中 在C:\ Windows \ system32 \ stack.yaml中:

Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a 重新路由-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3 stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1

计划构建失败。

我要安装时没有错误。

1 个答案:

答案 0 :(得分:0)

此错误中的重要内容如下:

  

在Spock-0.13.0.0的依赖项中:Spock-core必须匹配> = 0.13,但是堆栈配置没有指定的版本

基本上,这是正在发生的事情:主要的Haskell软件包存储库是Hackage。但是,Stack从其自己的存储库(称为Stackage)中获取其软件包。正如首页所说:

  

Stackage快照包含来自Hackage的固定软件包版本……这是一组精心设计的软件包,可以很好地协同工作

但是,Stackage存在一个主要问题:它并不包含Hackage中的每个软件包。这由以下事实表明:您正在使用的Stackage快照中该软件包没有指定的版本。但这就是Stack的错误信息所说的!因此,以通俗的英语来说,来自Stack的错误表明Spock-core不包含在您选择的快照中。

那么,我们该如何解决呢?好吧,可以手动告诉Stack使用哪个软件包版本。实际上,错误消息中包含执行此操作的说明:

  * Recommended action: try adding the following to your extra-deps
   in C:\Windows\system32\stack.yaml:

- Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a
- reroute-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3
- stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1

在这里,C:\Windows\system32\stack.yaml是全局堆栈配置文件的路径。要消除该错误,您需要打开该文件并找到以extra-deps:开头的行。然后,删除该行并将其替换为错误消息中的以下信息:

extra-deps:
- Spock-core-0.13.0.0@sha256:06e007f23c47bdda52d2927da54160d73f1b6f51a977f3ca9087275698db8f0a
- reroute-0.5.0.0@sha256:3360747cdc700c9808a38bff48b75926efa443d4af282396082329a218a8d9d3
- stm-containers-0.2.16@sha256:e98efa8dcf0045ea8a78a04b4e2763cf2d8bc33aad0750e2f30a67f8f4e933b1

这会通知Stack您要使用Spock-core的0.13.0.0版本,reroute的0.5.0.0版本和0.2.16 stm-containers的版本。通常,Stack可以使用适当的Stackage快照中的信息自行找出该信息,但是在这种情况下,快照不包含有关这三个软件包的信息,因此您必须自己指定此信息。