Haskell 与相互依赖的阴谋集团管理两个图书馆
我有以下问题: 我有两个相互依赖的Haskell库,两个库都由阴谋集团管理。相应的阴谋集团文件如下所示: 图书馆1:Haskell 与相互依赖的阴谋集团管理两个图书馆,haskell,recursion,libraries,cabal,cabal-install,Haskell,Recursion,Libraries,Cabal,Cabal Install,我有以下问题: 我有两个相互依赖的Haskell库,两个库都由阴谋集团管理。相应的阴谋集团文件如下所示: 图书馆1: name: Lib1 version: 0.1 cabal-version: >=1.2 build-type: Simple author: Matthias library hs-source-dirs: src build-depends: base >=
name: Lib1
version: 0.1
cabal-version: >=1.2
build-type: Simple
author: Matthias
library
hs-source-dirs: src
build-depends:
base >= 4,
Lib2
ghc-options: -Wall
exposed-modules: <...>
但尝试使用cabal install
安装另一个库(此处为库1)会导致依赖项错误:
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: Lib1-0.1 (user goal)
next goal: Lib2 (dependency of Lib1-0.1)
rejecting: Lib2-0.1/installed-aa4... (package is broken)
有没有办法处理两个相互依赖的库,这样我就不会出现依赖错误,或者cabal根本无法正确处理这种情况?正如其他人所说,循环依赖在cabal中永远不会起作用。编译具有循环依赖关系的模块已经够难了,但是包是一个没有希望的原因
有时这可能会令人烦恼,但唯一真正的解决办法是找到一种方法,以某种方式打破循环依赖。我认为这是行不通的。因为Cabal正在编译模块,所以您应该需要Lib1来编译Lib2,反之亦然,所以两者都不能先安装。老实说,我无法想象您是如何安装Lib2的——您是否碰巧安装了一个不依赖Lib2的Lib1早期版本?如果你这么做了,阴谋集团试图安装Lib1的那一刻就会破坏Lib2(这取决于Lib1)。请尝试注销这两个包(
ghc pkg unregister
),然后再试一次——我怀疑这会给出一组更清晰的错误。循环依赖关系只会导致麻烦,如果你能让它工作的话。打破这个循环,或者将一些东西从一个包移动到另一个包,将公共代码提取到第三个包中,或者将这些包合并到一个包中。
Resolving dependencies...
In order, the following will be installed:
Lib2-0.1 (reinstall)
Warning: Note that reinstalls are always dangerous. Continuing anyway...
Configuring Lib2-0.1...
Building Lib2-0.1...
Preprocessing library Lib2-0.1...
Registering Lib2-0.1...
Installing library in
C:\Users\Matthias\AppData\Roaming\cabal\Lib2-0.1\ghc-7.4.2
Registering Lib2-0.1...
Resolving dependencies...
cabal.exe: Could not resolve dependencies:
trying: Lib1-0.1 (user goal)
next goal: Lib2 (dependency of Lib1-0.1)
rejecting: Lib2-0.1/installed-aa4... (package is broken)