Haskell 与相互依赖的阴谋集团管理两个图书馆

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 >=

我有以下问题:

我有两个相互依赖的Haskell库,两个库都由阴谋集团管理。相应的阴谋集团文件如下所示:

图书馆1:

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)