我是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
不會顯示任何類型的卸載命令,所以我有點迷路瞭如何做到這一點。
我發現如果我輸入'cabal install parsec lens',那麼它會報告它只會打破我不使用的東西(不包括HTTP和「安全」之類的可怕東西),所以我打算繼續現在。不過,我仍然希望以正確的方式解決這類問題,因爲我相信它將在未來再次出現。 – Nathaniel
如果您可以使用降級變壓器-0.5.2.0 - > 0.4.3.0',則重建並重新安裝損壞的軟件包。爲了更好的生活,請嘗試[stack](https://docs.haskellstack.org/en/stable/README/)。 –
@Nathaniel您使用的是什麼版本的Cabal?嘗試更新到最新的1.24版本,如果你不在那裏。此外,通過在項目文件夾中運行'cabal sandbox init',然後運行Cabal安裝,使用Cabal沙箱是個不錯的主意。 – danidiaz