2017-08-15 149 views
1

我只想试试Haskell d3js包。下面是我的尝试:如何安装d3js Haskell软件包?

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. 

我在做什么错?我该如何解决这个依赖性问题?

回答

8

如您所见,d3js软件包在基本软件包上有一个上限。基本软件包是与给定版本的GHC一起提供的一组模块,包括例如Prelude。由于GHC基础版本,您不能安装与已有版本不同的版本,而无需安装其他GHC。

d3js软件包是最后一次(也是唯一一次)在2013年进行了更新,其基本版本界限表明它仅适用于GHC 7.6。不幸的是,Stack在2013年并不存在,并且没有与GHC 7.6协同工作的版本。你可能会获得一些成功,指示堆栈(从而Cabal)忽略上限的版本并且使用GHTS 7.8.4的LTS 2.22,虽然d3js包的基础上限可能与d3js包兼容,但我没有测试过。您可以通过在stack.yaml文件中设置allow-newer: True来完成此操作。

然而,d3js软件包太老了,无法与Stack提供的GHCs一起使用。

作为最后的手段,您可能可以通过在本地下载,更新其边界(并可能修复所导致的任何不兼容),以及配置stack.yaml文件以将其视为本地程序包和一个额外的依赖。有关说明,请参阅堆栈配置文档中的Local dependency packages

1

这个软件包非常旧,它对base软件包(读取,编译器版本)具有固定的依赖关系。

我首先放宽d3js.cabal文件中的依赖关系要求,然后再次运行构建。如果这样做不行,你需要破解代码,或者使用旧的编译器(或者堆栈解析器,如果你使用的是堆栈)。