управление двумя библиотеками с кликой, которые зависят друг от друга

У меня следующий вопрос:

У меня есть две библиотеки 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:   <...>

Библиотека 2:

name:           Lib2
version:        0.1
cabal-version:  >=1.2
build-type:     Simple
author:         Matthias

library
  hs-source-dirs:  src
  build-depends:   
               base >= 4,
               Lib1
  ghc-options:     -Wall
  exposed-modules: <...>

Установка одной из библиотек (здесь библиотека 2) с cabal install работает:

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

Но попытка установить другую библиотеку (здесь библиотека 1) с cabal install приводит к ошибке зависимости:

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 просто не может правильно обрабатывать такой случай?


person M.B.    schedule 09.05.2013    source источник
comment
Не думаю, что это когда-нибудь сработает. Поскольку Cabal компилирует модули, вам потребуется Lib1 для компиляции Lib2 и наоборот, поэтому ни один из них не может быть установлен первым. Честно говоря, я не могу себе представить, как вы заставили установить Lib2 — у вас случайно не была установлена ​​более ранняя версия Lib1, которая не зависела от Lib2? Если вы это сделали, в тот момент, когда Cabal попытается установить Lib1, он сломает Lib2 (которая зависит от Lib1). Попробуйте отменить регистрацию обоих пакетов (ghc-pkg unregister) и повторите попытку — я подозреваю, что это даст более четкий набор ошибок.   -  person isturdy    schedule 09.05.2013
comment
Циклические зависимости приведут только к проблемам, если вы вообще сможете заставить их работать. Разорвите цикл, переместив некоторые вещи из одного пакета в другой, извлекая общий код в третий пакет или объединив пакеты в один.   -  person hammar    schedule 09.05.2013


Ответы (1)


Как уже говорили другие, циклические зависимости никогда не будут работать в Cabal. Достаточно сложно компилировать модули с циклическими зависимостями, но пакеты — дело безнадежное.

Иногда это может быть раздражающе сложно, но единственное реальное решение — найти способ как-то разорвать циклическую зависимость.

person MathematicalOrchid    schedule 09.05.2013