【问题标题】:How to downgrade base with cabal?如何用阴谋集团降级基地?
【发布时间】:2016-10-13 13:22:41
【问题描述】:

我正在尝试在 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 要求 base 比 4.9 更早(堆栈比 cabal 更清楚地说明了这一点),然后我想将 base 降级到 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 版本。如何降级此软件包?

【问题讨论】:

    标签: haskell cabal cabal-install


    【解决方案1】:

    根据@leftroundabout 的回答,这个包中base 的上限是假的。在这种情况下,或者如果您觉得大胆,您可以指示 cabal 使用适当的选项忽略依赖项的上限:

    cabal install clanki --allow-newer=base
    

    【讨论】:

      【解决方案2】:

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

      很可能,该软件包实际上与 GHC-8.0 一起工作;事实上约束base &lt;= 4.9.0 表明它应该。该约束没有多大意义,因为它只允许预第一个子修订;应该是base &lt; 4.10

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

      如果它不能在 GHC-8.0 中编译,最好的办法是让它工作,方法是编辑源代码,然后提交拉取请求。

      或者,我会使用堆栈来安装具有较旧 GHC 的软件包。为此,获取带有 base &lt; 4.9 约束的源代码(您需要将其插入到 github 代码中),然后运行 ​​stack setupstack initstack install

      【讨论】:

      • cabal install clanki --allow-newer base覆盖约束怎么样
      • @JoachimBreitner:我实际上并不知道这个选项,但这很棒!你为什么不把它作为一个答案?
      猜你喜欢
      • 2014-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多