我们 - haskellers - 可能都知道 cabal hell 是什么。在尝试升级我们的应用程序/库时,由于安装的版本不同且上限不匹配,我们会出现故障。
我不明白。我查了一下:GHC将软件包安装为版本。这意味着当您安装mtl
时,您有mtl
个文件夹,每个版本安装一个文件夹。这听起来不错,因为我们可以安装同一个软件包的多个版本,并且根据我们.cabal
的上限,我们可以选择我们想要使用的版本。
然而,在很多情况下,GHC不会那样工作。如果您有上限,例如mtl < 4.2
,则无法安装mtl-4.2
或更高版本。我不明白为什么。为什么cabal / ghc没有说“是的,我可以安装它,它实际上没有破坏任何东西,因为该项目使用的是我已经拥有的版本,所以我将继续使用该版本”?
我想这是有充分理由的,也许这是因为并发版本。如果您使用mtl-4.2
并依赖于使用mtl-4.1
的程序包,则您需要同时使用两个版本,但不得允许这两个版本。但是,GHC可以默认为较低版本,并且允许安装较高版本而不会破坏任何内容。
关于这一点的另一点:如果这样做,我想有很多版本,很难跟踪我们真正使用的版本。有没有办法检查?我有时使用-v3
标志来获取有关正在发生的事情的更多信息,但cabal dep-list
之类的内容会很棒。也许它已经存在于ghc-pkg
?
答案 0 :(得分:0)
这个问题有很多问题,但我会解决这个问题。
它问:&#34;关于这一点的另一点:如果这样做,我想有很多版本,很难跟踪我们真正使用的版本。有没有办法检查?我有时使用-v3标志来获取有关正在发生的事情的更多信息,但像cabal dep-list这样的东西会很棒。也许ghc-pkg已经存在了?&#34;
如果您在沙箱中运行,此问题的其他元素似乎暗示您这样做,那么您可以调用cabal sandbox hc-pkg list
来查看沙箱环境,并且通常使用cabal sandbox hc-pkg anywhere one might use
ghc-pkg {{ 1}} ghc-pkg`但是沙箱本地。