2014-05-06 35 views
0

剛剛更新了幾天前的GHC和cabal,現在很多pacakages無法構建。無法在Arch Linux上使用GHC 7.8構建vty-ui

$ 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. 

回答

1

我有相同的設置,並嘗試下載最新的壓縮包並修改vty-ui.cabal以修復版本,例如

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

然後做了「cabal install」。我認爲上游只是爲了安全起見而設置了上限。我沒有對任何軟件包進行評分,它似乎工作正常。我前幾天做了這個,並正在記憶中。因人而異。

+0

我可以只刪除所有上限還是必須有一些上限? – osager

+0

是的,在這種情況下不會有任何區別。我只是提醒我,如果稍後必須重新安裝,請檢查新版本。 – Babu

1

的問題是,VTY-ui包對舊版本VTY的依賴關係,因此不能使用您已安裝的版本。在解決依賴問題時,cabal希望安裝某些其他包的舊版本,但很高興使用相同版本的parsec。但是由於parsec將會被其舊版本的某些依賴替代,因此它也需要重新安裝。 GHC會樂意讓不同版本號的包的多個版本共存,但不能在同一個包數據庫中處理具有相同版本號的包的多個副本,因此cabal需要替換parsec-3.1.5安裝。這打破了你已經安裝的vty版本。

有幾種方法來解決這個問題:

你可以使用cabal sandbox init並安裝所需的包到本地沙箱中,讓你的正常包數據庫完好。

你可以使用--force-reinstalls標誌,如cabal建議。你可能希望在你使用的時候指定一個更新版本的vty-ui,這可能會破壞更多已安裝的軟件包(這就是cabal選擇這樣一箇舊軟件包的原因)。之後,您可以嘗試重新安裝您仍然需要的任何破損軟件包,並希望不會有衝突。

您可以訪問vty-ui的源代碼庫並查看是否有與您的vty版本兼容的新版本。如果沒有,您可以嘗試自己進行必要的更改(這可能與更改.cabal文件中的某些上限一樣簡單),然後提交修補程序/拉取請求。

+0

我試過了沙盒的方式,沒有運氣。我剛剛檢查過,vty依賴關係沒有上限:vty(> = 4.7.0.18) – osager