Я работаю над основанной на потоке данных библиотекой оптимизации, записанной в Haskell. Теперь кажется вероятным, что библиотека оказывается перед необходимостью быть разделенной на две части:
Базовая часть с минимальными зависимостями от сборки; назовите его hoopl-core
.
Полная часть, назовите его hoopl
, который может иметь дополнительные зависимости от пакетов как prettyprinter, QuickCheck, и так далее.
Идея состоит в том, что Компилятор Haskell Глазго будет зависеть только от hoopl-core
, так, чтобы не было слишком трудно загрузить компилятор. Другие компиляторы приведут дополнительных положительных героев hoopl
. Пакет hoopl
будет зависеть от hoopl-core
.
Инструменты пакета Debian могут создать несколько пакетов из единственного исходного дерева. К сожалению, Интрига еще не достигла того уровня изощренности. Но должна быть другая библиотека или разработчики приложений там, у которых есть подобные проблемы (например, один пакет для оперативной библиотеки, другой для интерфейса командной строки, другой для графического интерфейса).
Что такое текущие лучшие практики для создания, и управление несколькими связало пакеты Haskell с помощью Интриги?
Я бы поместил два пакета в отдельные подкаталоги и получил бы Makefile
примерно так:
.PHONY: all hoopl hoop-core
all : hoopl
hoopl : hoopl-core
cd hoopl && cabal build && cabal register --inplace
hoopl-core
cd hoopl-core && cabal build && cabal register --inplace
это предполагает, что вы загрузили процесс, сначала построив hoopl-core и зарегистрировав его ( - на месте
), а затем строит хуп
. Вы можете автоматизировать больше этого, используя Makefile.
Как вы знаете, когда нам понадобилась аналогичная функциональность для GHC, мы вместо этого написали нашу собственную систему сборки ;-) Я этого не рекомендую. Технически я полагаю, что можно было бы извлечь из системы сборки GHC необходимые части и создать повторно используемый фреймворк, хотя ...
Поместите два пакета в отдельные подкаталоги репозитория системы управления версиями и используйте два отдельных файла cabal.
Убедитесь, что вы используете операцию перемещения вашей системы управления версиями при перемещении файлов, чтобы она правильно отслеживала историю.