无法使用GHC 7.8在Arch Linux上构建vty-ui

时间:2014-05-06 20:18:00

标签: haskell ghc cabal

刚刚更新了GHC和cabal几天前,现在很多无法建造的pacakages。

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.2

$ cabal --version
cabal-install version 1.18.0.3
using version 1.18.1.3 of the Cabal library 

我可以安装vty但不能安装vty-ui。我有以下错误:

$ cabal install vty-ui
Resolving dependencies...
In order, the following would be installed:
containers-0.3.0.0 (latest: 0.5.5.1) (new version)
mtl-1.1.1.1 (latest: 2.2.0.1) (new version)
QuickCheck-2.1.2 (latest: 2.7.3) (new package)
parallel-1.1.0.1 (latest: 3.2.0.4) (new version)
parsec-3.1.5 (reinstall) changes: mtl-2.1.3.1 -> 1.1.1.1
pcre-light-0.3.1.1 (latest: 0.4.0.2) +small_base (new package)
semigroups-0.13.0.1 (new package)
void-0.6.1 (new package)
MemoTrie-0.6.2 (new package)
vector-space-0.5.9 (latest: 0.8.6) (new package)
vty-4.2.1.0 (latest: 4.7.5) (new version)
vty-ui-0.4 (latest: 1.6.1) (new package)
cabal: The following packages are likely to be broken by the reinstalls:
vty-4.7.5
Use --force-reinstalls if you want to install anyway.

2 个答案:

答案 0 :(得分:1)

问题是vty-ui软件包依赖于旧版本的vty,因此无法使用您已安装的版本。在解决依赖关系时,cabal想要安装某些其他软件包的旧版本,但很高兴使用相同版本的parsec。但是,由于parsec将被一些依赖项替换为旧版本,因此需要重新安装。 GHC很乐意让不同版本号的软件包的多个版本共存,但不能在同一软件包数据库中处理具有相同版本号的软件包的多个副本,因此cabal需要替换parsec-3.1.5安装。这打破了你已安装的vty的版本。

有几种方法可以解决这个问题:

您可以使用cabal sandbox init并将所需的软件包安装到本地沙箱中,从而保持正常的软件包数据库不变。

您可以像cabal建议的那样使用--force-reinstalls标志。您可能希望在使用时指定较新版本的vty-ui,这可能会破坏更多已安装的软件包(这就是为什么cabal选择了这样一个旧软件包)。之后,您可以尝试重新安装您仍然需要的任何损坏的软件包,并希望不会发生冲突。

您可以访问vty-ui的源存储库,看看是否有与您的vty版本兼容的新版本。如果不是,您可以尝试自己进行必要的更改(这可能就像更改.cabal文件中的某些上限一样简单),然后提交补丁/拉取请求。

答案 1 :(得分:1)

我有相同的设置并尝试下载最新的tarball并修改vty-ui.cabal以提升版本,例如

unix >= 2.4 && < 2.8
array >= 0.3.0.0 && < 0.6.0.0
QuickCheck >= 2.4 && < 2.8

然后进行了#34; cabal安装&#34;。我认为为了安全起见,上游只是设置了上限。我没有降低任何包装的等级,它似乎工作正常。我几天前这样做了,并且记忆犹新。 YMMV。