Здесь есть несколько различных понятий "проекта":
- git repo
- стековый проект (определенный
stack.yaml
) - cabal-проект (определяется
project-name.cabal
) - библиотека / исполняемый файл
Вполне разумно начать с простой структуры один-к-одному, где у вас есть ровно один из каждого из них,и позже разбейте вещи.
- Один репозиторий git позволяет легко синхронизировать изменения;несколько репозиториев позволяют легко предоставлять доступ к фиксации для разных людей или отражают более слабую связь между командами
- один стек проект позволяет легко использовать одни и те же версии зависимостей для всего вашего кода;несколько проектов облегчают обновление различных программ / библиотек в разное время
- Если вы используете
stack
, я не думаю, что будет иметь большое значение, сохраняете ли вы исполняемые файлы в отдельных проектах Cabal или все вместе.Если вы хотите публиковать библиотеки в Hackage, вам понадобится каждая из них в своем собственном проекте Cabal.
Документы стека объясняют, как включить несколько проектов Cabal в один проект стека.Они могут находиться под каталогом, содержащим stack.yaml
, или нет.Поэтому, если вы хотите, вы можете перемещаться поэтапно:
- из одного кабального проекта в несколько
- из одного репозитория git в несколько, используя путь к локальной проверке в
stack.yaml
построить против того, что вы в настоящее время извлекли - в git-репозиторий и зафиксировать хеш в
stack.yaml
, так что любой строитель получит ту же версию библиотеки-репо