GHC如何真正处理版本控制?

时间:2015-02-17 09:45:15

标签: haskell dependencies ghc cabal

我们 - 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

1 个答案:

答案 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`但是沙箱本地。