Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell “阴谋集团”说的是什么意思;以下软件包可能因重新安装而损坏;_Haskell_Cabal - Fatal编程技术网

Haskell “阴谋集团”说的是什么意思;以下软件包可能因重新安装而损坏;

Haskell “阴谋集团”说的是什么意思;以下软件包可能因重新安装而损坏;,haskell,cabal,Haskell,Cabal,我在运行cabal v1 install时看到过几次弹出此消息,并建议使用--强制重新安装进行安装。由于我对阴谋集团了解不多,我不知道为什么一个包会因为重新安装而损坏。有人能告诉我这条消息背后的背景吗?未来读者注意:这次讨论是关于历史问题的。出于实际目的,如果你使用的是阴谋集团3,你可以安全地忽略所有这些 这个问题与可传递依赖性有关。例如,假设我们在特定版本上安装了以下三个软件包: A-1.0 B-1.0,这取决于A;及 C-1.0,它依赖于B,但不明确依赖于A 然后,我们将安装A-1.1,

我在运行
cabal v1 install
时看到过几次弹出此消息,并建议使用
--强制重新安装
进行安装。由于我对阴谋集团了解不多,我不知道为什么一个包会因为重新安装而损坏。有人能告诉我这条消息背后的背景吗?

未来读者注意:这次讨论是关于历史问题的。出于实际目的,如果你使用的是阴谋集团3,你可以安全地忽略所有这些

这个问题与可传递依赖性有关。例如,假设我们在特定版本上安装了以下三个软件包:

  • A-1.0
  • B-1.0
    ,这取决于
    A
    ;及
  • C-1.0
    ,它依赖于
    B
    ,但不明确依赖于
    A
然后,我们将安装
A-1.1
,它似乎可以正常工作:

  • 将安装
    A-1.1
    ,但将保留较旧的
    A-1.0
    版本,仅用于使用它构建的其他软件包
  • B-1.0
    将继续使用
    A-1.0
    ;及
  • C-1.0
    将继续使用
    B-1.0
但是,无论出于何种原因,如果我们试图重新安装
B-1.0
(而不是更新到
B-1.1
),就会出现问题:

  • A-1.1
    A-1.0
    仍可用于其他需要它们的软件包
  • 然而,
    B-1.0
    将根据
    A-1.1
    进行重建,无法保持相同版本
    B
    的第二次安装;及
  • C-1.0
    ,它是根据被替换的
    B-1.0
    (依赖于
    A-1.0
    )构建的,现在将被破坏
v1安装
提供了防止此类危险重新安装的保护措施。使用
--强制重新安装将禁用该保护装置

有关周围问题的详细解释,请参见Albert Y.C.Lai的(特别是,我在这里使用的示例基本上是其推论的总结:鸽子下降Con部分)


尽管Cabal 1在其更高版本中能够在上述场景中检测到重新安装的
B
发生了变化,即使版本号保持不变(这是使安全保护成为可能的原因),但它无法同时保留
B-1.0
的两个变体。另一方面,阴谋集团3能够做到这一点,从而消除了问题

只要可能,应避免使用
v1-
命令,而应使用
v2-
命令。后者是cabal install 3.0及以后的默认版本。