5

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

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

4

3 回答 3

4

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

cabal unpack foo

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

cabal install

从你解压到的目录。

由于 base-4.6 有一些重大变化;和超类已从 中删除,并且Eq不再作为超类,可能需要通过添加来修复代码,或添加某些函数的约束以使包编译。ShowNumBitsNumEqShowNum

这很不方便,但要在几周内使用最新的 GHC 版本来更新自己的价格。

于 2012-10-15T22:38:56.413 回答
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
于 2012-10-15T22:32:10.810 回答
1

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

不过,您可能需要先与包维护者联系。一个开发分支可能已经支持你需要的东西,他们只需要一点刺激就可以发布它。

于 2012-10-16T02:37:57.243 回答