Skip to content

Файлы конфигурации Haskell проектов

Aleksei Pirogov edited this page Dec 30, 2020 · 4 revisions

Файлы конфигурации stack-проектов

Файлы stack-проектов

stack.yaml

Определяет как собрать проект из пакетов(packages) с помощью конкретного resolver. Как минимум один пакет должен быть упомянут. Минимальный stack.yaml выглядит так:

resolver: lts-11.0

packages:
    - .

(Элементы packages - относительные пути к папкам с исходниками пакетов. В данном случае пакет один, расположен в текущей папке)

Так же в stack.yaml могут присутствовать

  • extra-deps - зависимости какого либо из пакетов, которые не вошли в stackage snapshot, соответствующий resolver'у, либо должны иметь отличные от указанных в снапшоте версии;

  • флаги для сборки конкретных пакетов.

Подробнее содержимое файла описано в документации к stack.

package.yaml

Если проект собирается современным stack'ом, то .cabal-файлы могут быть сгенерированы с помощью hpack на основе информации из файла package.yaml. Само наличие этого файла говорит - "используется hpack!". Например, package.yaml будет присутствовать, если генерировать новый проект с помощью stack new из шаблона по умолчанию. Использование hpack имеет ряд преимуществ. Скажем, часть работы по описанию пакета вообще автоматизируется (подробнее - в документации к hpack).

Отметьте: если некий пакет в вашем stack-проекте содержит package.yaml, то изменять нужно уже этот файл, а не .cabal-файл!

В случае, если вы хотите использовать .cabal файлы, а не package.yaml это все ещё возможно, см. раздел .cabal-файлы ниже.

Файлы cabal-install проектов.

.cabal-файлы

Каждый пакет должен быть описан с помощью файла package_name.cabal установленного формата. Именно этот файл в частности описывает зависимости, которые нужды для сборки элементов пакета - библиотеки (одна на пакет, именуется так же, как и пакет), исполняемых файлов, test suits.

Отметьте: когда говорят "дописать в зависимости", то имеется в виду именно добавление зависимости в .cabal-файл!

.project-файл

Начиная с версии 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.project.freeze

Файл создаваемый командой cabal new-freeze позволяющий зафиксировать версии библиотек в проекте.

hie.yaml

Этот файл подсказывает, чем предпочтительно запускать REPL для использования внутри Haskell Language Server. Этот файл вам может потребоваться, если HLS не сможет сам угадать, какой файл к какому артефакту (Cabal target) принадлежит. Формат у файла простой, почитать о структуре можно здесь.

См. также

Clone this wiki locally