gpt4 book ai didi

haskell - Cabal 无法安装依赖项,但如果直接询问可以安装它们

转载 作者:行者123 更新时间:2023-12-02 14:27:14 25 4
gpt4 key购买 nike

我发现 Cabal 反复出现一个非常奇怪的问题,它影响了我获得可重复的 Haskell 构建的能力。我有一个带有沙箱的 cabal 项目。如果我执行cabal install,我会收到以下形式的错误

Y 在构建阶段失败。异常(exception)的是:
退出失败1
X 依赖于安装失败的 Y。

其中 X 是我的项目的直接依赖项,Y 是某种传递依赖项。但是,如果我只输入 cabal install X,那么它就可以工作!

这是一个具体示例:我的项目依赖于 interpolate 包。当我执行cabal install --allow-newer时,我收到如下错误:

Resolving dependencies...
Configuring haskell-src-meta-0.6.0.9...
Building haskell-src-meta-0.6.0.9...
Preprocessing library haskell-src-meta-0.6.0.9...
[1 of 6] Compiling Language.Haskell.TH.Instances.Lift ( src/Language/Haskell/TH/Instances/Lift.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/TH/Instances/Lift.o )
[2 of 6] Compiling Language.Haskell.Meta.Syntax.Translate ( src/Language/Haskell/Meta/Syntax/Translate.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/Meta/Syntax/Translate.o )
[3 of 6] Compiling Language.Haskell.Meta.Parse ( src/Language/Haskell/Meta/Parse.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/Meta/Parse.o )
[4 of 6] Compiling Language.Haskell.Meta.Parse.Careful ( src/Language/Haskell/Meta/Parse/Careful.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/Meta/Parse/Careful.o )
[5 of 6] Compiling Language.Haskell.Meta ( src/Language/Haskell/Meta.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/Meta.o )
[6 of 6] Compiling Language.Haskell.Meta.Utils ( src/Language/Haskell/Meta/Utils.hs, dist/dist-sandbox-d2861272/build/Language/Haskell/Meta/Utils.o )

src/Language/Haskell/Meta/Utils.hs:67:1:
Duplicate instance declarations:
instance Typeable Q
-- Defined at src/Language/Haskell/Meta/Utils.hs:67:1
instance Typeable Q -- Defined in ‘Language.Haskell.TH.Instances’

src/Language/Haskell/Meta/Utils.hs:71:1:
Duplicate instance declarations:
instance Typeable QuasiQuoter
-- Defined at src/Language/Haskell/Meta/Utils.hs:71:1
instance Typeable QuasiQuoter
-- Defined in ‘Language.Haskell.TH.Instances’
Failed to install haskell-src-meta-0.6.0.9

...

haskell-src-meta-0.6.0.9 failed during the building phase. The exception was:
ExitFailure 1
interpolate-0.1.0 depends on haskell-src-meta-0.6.0.9 which failed to install.

但是,如果我继续输入 cabal install interpolate-0.1.0,安装成功并且我能够继续安装我的项目。

这很令人沮丧,因为我必须“手动”安装几个软件包才能安装所有依赖项。原始安装因编译器错误而失败的事实似乎表明编译器的配置以某种方式不同?

我正在使用 GHC 7.8.3 和 cabal-install 1.22.4.0(Cabal 库的版本 1.22.3.0)。非常感谢您的帮助!

最佳答案

其实不是haskell-src-meta版本的问题而是与其依赖项的版本 th-orphans .

haskell-src-meta (版本 0.6.0.8 和 0.6.0.9)有一个上限 th-orphans <0.12 .

--allow-newer你告诉 Cabal 忽略版本上限,所以 Cabal 决定使用 th-orphans版本 0.12.0,因为它更新并且可能更好。但事实上,haskell-src-meta确实不能用 th-orphans 构建正如您所发现的,版本 0.12.0。

无限制使用--allow-newer一般情况下很可能会遇到此类问题。最好使用 --allow-newer=base,containers,... 指定要忽略其上限的包。 ,尽管在某些情况下这样做可能相当乏味。

在问题的第一句话中,您提到了可重复构建。如果这就是您想要的,那么没有什么可以替代简单地记录您想要的所有直接和间接依赖项的确切版本。

关于haskell - Cabal 无法安装依赖项,但如果直接询问可以安装它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30310179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com