我发现 Cabal 反复出现一个非常奇怪的问题,它影响了我获得可重复的 Haskell 构建的能力。我有一个带有沙箱的阴谋集团项目。如果我做cabal install
,我收到以下形式的错误
Y failed during the building phase. The exception was:
ExitFailure 1
X depends on Y which failed to install.
其中 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.
However,如果我继续输入cabal install interpolate-0.1.0
, 安装succeeds我可以继续安装我的项目。
这很令人沮丧,因为我必须“手动”安装几个软件包才能安装所有依赖项。原始安装因编译器错误而失败的事实似乎表明编译器的配置以某种方式不同?
我正在使用 GHC 7.8.3 和 cabal-install 1.22.4.0 (Cabal 库的版本 1.22.3.0)。非常感谢您的帮助!