如果库需要不同版本的`base`怎么办?

时间:2012-10-15 22:24:57

标签: haskell cabal

我正在尝试安装需要与我安装的版本不同的版本的软件包(我有4.6.0.0,它们需要< 4.6)。如何在我的系统上安装这些?

编辑:这些软件包实际上需要较旧的软件包才能构建,而不仅仅是作为.cabal约束。

3 个答案:

答案 0 :(得分:4)

由于您无法重新安装base,因此在更新这些软件包之前安装这些软件包的唯一方法是获取源代码,

cabal unpack foo

然后修改foo.cabal,更改base的上限,更改包版本(附加.1),以便在安装其他包cabal时不会我认为它已被破坏,因为它知道的.cabal文件(来自包索引)说它需要不同版本的base

cabal install

从您解压缩到的目录。

由于base-4.6有一些重大变化;已从Eq移除了ShowNum超类,并且Bits不再有Num作为超类,可能需要修改代码将EqShowNum添加到某些函数的约束中以使包编译。

这样做不方便,但需要花几周时间了解最新的GHC版本。

答案 1 :(得分:1)

如果您只是希望其中一个程序依赖这些程序包,则可以使用cabal-dev作为cabal的替代品。前者在当前目录的cabal-dev路径中安装软件包的本地副本。要安装它,只需运行:

cabal install cabal-dev

为了便于携带,您可以在makefile中添加以下内容:

CABAL ?= cabal

build :
    $(CABAL) build --builddir=$(BUILD_PATH)

然后在你的Bash设置中:

CABAL=cabal-dev
export CABAL

答案 2 :(得分:1)

如果包与您当前拥有的基础不兼容(即只更改约束不足),您唯一的选择是自己移植包或使用提供正确版本基础的旧ghc。

您可能希望首先检查软件包维护者。开发分支可能已经支持您所需要的东西,他们只需要一点点刺激就可以发布它。