я получил следующий вопрос:управление два библиотеками с интригой, которые зависят друг от друга
У меня есть две библиотек Haskell, которые зависят друг от друга, и обе библиотеки управляется заговорщиками. Соответствующие Cabal файлы выглядеть следующим образом:
Library 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: <...>
Library 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 компилирует модули, вам нужно Lib1 для компиляции Lib2 и наоборот, поэтому ни один из них не должен быть установлен первым. Честно говоря, я не могу представить, как вы установили Lib2 для установки - случайно ли у вас установлена более ранняя версия Lib1, которая не зависела от Lib2? Если вы это сделали, момент, когда Кабаль пытается установить Lib1, он сломает Lib2 (что зависит от Lib1). Попробуйте отменить регистрацию обоих пакетов ('ghc-pkg unregister') и повторить попытку - я подозреваю, что это даст более четкий набор ошибок. – isturdy
Круговые зависимости приведут только к неприятностям, если вы даже можете заставить их работать вообще. Разрыв цикла, перемещение некоторых вещей из одного пакета в другой, извлечение общего кода в третий пакет или объединение пакетов в один. – hammar