2016-10-02 65 views
0

我是Haskell的初學者,我一直在愉快地使用cabal來安裝我認爲可能需要的所有東西,假設它可以像port或homebrew一樣工作,爲我解決所有依賴關係並保持最新狀態,所以它們不會斷裂,等等。但是,試圖安裝裝配的lenses圖書館中,我得到這個消息現在當:如何解決cabal中的破壞依賴關係?

In order, the following would be installed: 
base-orphans-0.5.4 (new package) 
distributive-0.5.0.2 (new version) 
comonad-5 (new version) 
bifunctors-5.4.1 (new package) 
mtl-2.2.1 (reinstall) changes: transformers-0.5.2.0 -> 0.4.3.0 
exceptions-0.8.3 (new package) 
prelude-extras-0.4.0.3 (new package) 
profunctors-5.2 (new package) 
reflection-2.1.2 (new package) 
semigroupoids-5.1 (new package) 
free-4.12.4 (new package) 
adjunctions-4.3 (new package) 
kan-extensions-5.0.1 (new package) 
lens-4.14 (new package) 
cabal: The following packages are likely to be broken by the reinstalls: 
parsec-3.1.11 
network-uri-2.6.1.0 
hackage-security-0.5.2.2 
HTTP-4000.3.3 
Use --force-reinstalls if you want to install anyway. 

好,突破HTTP和一些所謂的「安全」聽起來不像是個好主意,我的代碼依賴於Parsec。解決這種情況的正確方法是什麼?我應該使用--force-reinstalls並期望事情不會真的破裂?或者讓這些軟件包破壞然後重新安裝它們,假設HTTP軟件包被破壞可能會發生這種情況。或者我必須自己選擇安裝或不安裝哪些軟件包,知道某些軟件包會相互衝突?

問題的一部分可能是我最初沒有意識到hackage上的一些軟件包並不是真正的生產質量代碼,所以我確實有很多依賴關係,我並不需要它們。解決方案可能是卸載這些軟件包及其依賴項。但是cabal --help不會顯示任何類型的卸載命令,所以我有點迷路瞭如何做到這一點。

+1

我發現如果我輸入'cabal install parsec lens',那麼它會報告它只會打破我不使用的東西(不包括HTTP和「安全」之類的可怕東西),所以我打算繼續現在。不過,我仍然希望以正確的方式解決這類問題,因爲我相信它將在未來再次出現。 – Nathaniel

+3

如果您可以使用降級變壓器-0.5.2.0 - > 0.4.3.0',則重建並重新安裝損壞的軟件包。爲了更好的生活,請嘗試[stack](https://docs.haskellstack.org/en/stable/README/)。 –

+1

@Nathaniel您使用的是什麼版本的Cabal?嘗試更新到最新的1.24版本,如果你不在那裏。此外,通過在項目文件夾中運行'cabal sandbox init',然後運行Cabal安裝,使用Cabal沙箱是個不錯的主意。 – danidiaz

回答

0

標準技術是告訴cabal您不介意重新安裝將被破壞的軟件包。你可以做的東西像這樣

cabal install lenses parsec-3.1.11 network-uri-2.6.1.0 hackage-security-0.5.2.2 HTTP-4000.3.3 

有在這裏發生了什麼對this fine introduction to cabal packages進一步的細節,特別是標有「鴿子降精讀」一節。