如何用cabal降级基数?

时间:2016-10-13 13:22:41

标签: haskell cabal cabal-install

我正在尝试在Windows 10上安装一个名为clanki的程序。在它的安装文档中,它说使用'cabal install clanki'。我下载了cabal,然后是ghc。现在我遇到了包base的版本问题。

$ cabal install clanki
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: clanki-1.2.7 (user goal)
next goal: base (dependency of clanki-1.2.7)
rejecting: base-4.9.0.0/installed-4.9... (conflict: clanki => base<=4.9.0)
rejecting: 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.

因此clanki要求基数超过4.9(堆栈比cabal更明确地表示),然后我想将基数降级到4.8.2.0。当我尝试ghc-pkg unregister base时,它不允许我。甚至没有使用--force

$ ghc-pkg unregister base --force
unregistering would break the following packages: xhtml-3000.2.1 Win32-2.3.1.1 transformers-0.5.2.0 time-1.6.0.1 template-haskell-2.11.0.0 process-1.4.2.0 pretty-1.1.3.3 hpc-0.6.0.3 hoopl-3.10.2.1 haskeline-0.7.2.3 ghci-8.0.1 ghc-boot-th-8.0.1 ghc-boot-8.0.1 ghc-8.0.1 filepath-1.4.1.0 directory-1.2.6.2 deepseq-1.4.2.0 containers-0.5.7.1 Cabal-1.24.0.0 bytestring-0.10.8.1 binary-0.8.3.0 array-0.5.1.1 (ignoring)

正如我所提到的,我也试过堆栈,但最终它也归结为错误版本的base。我怎样才能降级此套餐?

2 个答案:

答案 0 :(得分:7)

根据@ leftroundabout的回答,这个包中base的上限是假的。在这种情况下,或者只是如果你觉得粗体,你可以通过适当的选项指示cabal忽略依赖关系的上限:

cabal install clanki --allow-newer=base

答案 1 :(得分:5)

你不能。 base固定在GHC安装上;获得不同版本的唯一方法是安装较旧的编译器,即GHC-7.10。 stack会自动为您执行此操作,但我不确定这是否是最佳解决方案。

很可能,包实际上与GHC-8.0一起使用;事实上,约束base <= 4.9.0表明它应该。这个约束并没有多大意义,因为它只允许先预先设置子程序;它可能应该是base < 4.10

所以最好的方法是从github下载源代码,其中base实际上没有上限,并使用cabal install从本地文件夹安装它。如果可行,请通知作者放松对Hackage的约束。

如果它没有在GHC-8.0中编译,那么最好的方法是使其工作通过编辑源然后提交拉取请求。

或者,我然后使用堆栈来安装具有较旧GHC的包。要执行此操作,请使用base < 4.9约束获取源代码(您需要在github代码中插入该代码),然后运行stack setupstack init和{ {1}}。