-
Notifications
You must be signed in to change notification settings - Fork 48
Файлы конфигурации Haskell проектов
Определяет как собрать проект из пакетов(packages
) с помощью конкретного resolver
. Как минимум один пакет
должен быть упомянут. Минимальный stack.yaml
выглядит так:
resolver: lts-11.0
packages:
- .
(Элементы packages
- относительные пути к папкам с исходниками пакетов. В данном случае пакет один, расположен в текущей папке)
Так же в stack.yaml могут присутствовать
-
extra-deps
- зависимости какого либо из пакетов, которые не вошли в stackage snapshot, соответствующий resolver'у, либо должны иметь отличные от указанных в снапшоте версии; -
флаги для сборки конкретных пакетов.
Подробнее содержимое файла описано в документации к stack.
Если проект собирается современным stack'ом, то .cabal-файлы могут быть сгенерированы с помощью hpack на основе информации из файла package.yaml
. Само наличие этого файла говорит - "используется hpack!". Например, package.yaml будет присутствовать, если генерировать новый проект с помощью stack new
из шаблона по умолчанию. Использование hpack имеет ряд преимуществ. Скажем, часть работы по описанию пакета вообще автоматизируется (подробнее - в документации к hpack).
Отметьте: если некий пакет в вашем stack-проекте содержит package.yaml, то изменять нужно уже этот файл, а не .cabal-файл!
В случае, если вы хотите использовать .cabal
файлы, а не package.yaml
это все ещё возможно, см. раздел .cabal
-файлы ниже.
Каждый пакет должен быть описан с помощью файла package_name.cabal
установленного формата. Именно этот файл
в частности описывает зависимости, которые нужды для сборки элементов пакета - библиотеки (одна на пакет, именуется так же, как и пакет), исполняемых файлов, test suits.
Отметьте: когда говорят "дописать в зависимости", то имеется в виду именно добавление зависимости в .cabal-файл!
Начиная с версии 2.0 cabal-install
поддерживает описание файлов проекта, которые играют примерно ту же роль,
что и файл stack.yaml
для стек проекта. В этом файле можно описать библиотеки входящие в проект, репозитории откуда брать зависимости и флаги сборки библитотеки.
Полное описание файлов проекта можно найти на странице документации cabal
Минимальный .project файл выглядит как:
packages: *.cabal
Из полезных опций есть:
optional-packages: ./vendor/**/*.cabal
позволяет добавлять в план зависимости находящиеся по определенному пути если они там есть, что очень удобно для временных экспериментов и зависимостями.
Указание версий пакетов из репозиториев:
source-repository-package
type: git
location: https://github.com/hvr/HsYAML.git
tag: e70cf0c171c9a586b62b3f75d72f1591e4e6aaa1
Флагов:
constraints: bar == 2.1,
bar +foo -baz
Файл создаваемый командой cabal new-freeze
позволяющий зафиксировать версии библиотек в проекте.
Этот файл подсказывает, чем предпочтительно запускать REPL для использования внутри Haskell Language Server. Этот файл вам может потребоваться, если HLS не сможет сам угадать, какой файл к какому артефакту (Cabal target) принадлежит. Формат у файла простой, почитать о структуре можно здесь.
- stack.yaml vs cabal package file (документация к stack)
- Haskell: Build Tools (блог kowainik team)