我想尝试Haskell d3js包。这就是我的尝试:
stack install d3js
但它给出了错误:
Error: While constructing the build plan, the following exceptions were encountered:
In the dependencies for d3js-0.1.0.0:
base-4.9.1.0 must match >=4.6 && <4.7 (latest applicable is 4.6.0.1)
我尝试了stack install base-4.6.0.1
,它没有输出任何内容但完成没有错误,但我在尝试stack install d3js
时仍然遇到同样的错误。
我也试过使用阴谋:
$ cabal install d3js
Resolving dependencies...
cabal: Could not resolve dependencies:
trying: d3js-0.1.0.0 (user goal)
next goal: base (dependency of d3js-0.1.0.0)
rejecting: base-4.9.1.0/installed-4.9... (conflict: d3js => base>=4.6 && <4.7)
rejecting: base-4.10.0.0, base-4.9.1.0, base-4.9.0.0, base-4.8.2.0,
base-4.8.1.0, base-4.8.0.0, base-4.7.0.2, base-4.7.0.1, base-4.7.0.0,
base-4.6.0.1, base-4.6.0.0, base-4.5.1.0, base-4.5.0.0, base-4.4.1.0,
base-4.4.0.0, base-4.3.1.0, base-4.3.0.0, base-4.2.0.2, base-4.2.0.1,
base-4.2.0.0, base-4.1.0.0, base-4.0.0.0, base-3.0.3.2, base-3.0.3.1
(constraint from non-upgradeable package requires installed instance)
Dependency tree exhaustively searched.
我做错了什么?我该如何解决这个依赖问题?
答案 0 :(得分:8)
如您所见,d3js包在基础包上有一个上限。基础包是与给定版本的GHC一起提供的一组模块,包括例如Prelude
。由于基础版附带GHC,因此如果不安装不同的GHC,则无法安装与已有版本不同的版本。
d3js软件包是最后一次(并且仅)在2013年更新的,其基本版本边界表明它只适用于GHC 7.6。不幸的是,Stack在2013年不存在,并且没有与GHC 7.6一起使用的stackage版本。您可能有一些成功指示Stack(以及Cabal)忽略上层版本绑定并使用LTS 2.22与GHC 7.8.4,尽管d3js包的基础上限,但d3js包可能兼容,但我没有测试过。您可以通过在stack.yaml文件中设置allow-newer: True
来完成此操作。
然而,可能只是d3js软件包太旧而无法使用Stack提供的GHC。
作为最后的手段,您可以通过在本地下载,更新其边界(并且可能修复导致的任何不兼容性)来修复它,并配置stack.yaml文件以将其视为本地包和额外的依赖。有关说明,请参阅堆栈配置文档中的Local dependency packages。
答案 1 :(得分:1)
这个包很老了,它对base
包有固定的依赖性(读取,编译器版本)。
我首先放松d3js.cabal
文件中的依赖性要求,然后再次运行build。如果这不起作用,你需要破解代码,或使用旧的编译器(或堆栈解析器,如果你使用堆栈)。