Что такое пакет.ямл и стек.ямл и настройка.УГ и-имя проекта.файлы Кабал-клана?


Я обнаружил, что при использовании команды stack new the-project-name new-template многие файлы генерируются в новый каталог. и я замечаю следующие 4 специальных файла:

package.yaml
stack.yaml
Setup.hs
the-project-name.cabal

Эти 4 файла, похоже, предназначены для предоставления метаданных для программного обеспечения для управления пакетами, но они выглядят запутанными, я имею в виду, почему их 4, Почему не один, и в чем разница между ними?

1 10

1 ответ:

Эти конфигурационные файлы служат различным целям. Неясно, что лучше: иметь один всеохватывающий конфигурационный файл или разные файлы для разных инструментов сборки и разных целей.

Интернет-проекта-Имя.междусобойчик

Этот файл содержит описание вашего пакета. Например, список модулей, библиотечные зависимости, параметры компилятора, метаданные проекта (Имя автора, версия пакета и т. д.). Это описание указано в специальном для cabal формат.

Пакет.ямл

Этот конфигурационный файл используется hpack инструмент. Это позволяет указать те же самые вещи, которые вы указываете в файле .cabal. Но в формате YAML вместо пользовательского формата cabal. Кроме того, он добавляет некоторые функции над cabal. Если вы не хотите сейчас погружаться в hpack, Вы можете безопасно удалить файл package.yaml. Обратите внимание, что .cabal файл генерируется hpack из package.yaml файла, поэтому вы не должны редактировать .cabal файл, если вы используете hpack.

Стек.ямл

Конфигурация для инструмента сборки stack. Добавьте дополнительные параметры конфигурации. Самое важное: имя решателя LTS.

Настройка.hs

Используется для добавления некоторых сборочных крючков. Почти во всех случаях вы можете удалить и этот файл. Но я могу привести вам реальный пример использования этого файла из нашей работы.

Мы пишем сервис, где различные узлы должны взаимодействовать, используя формат буферов протокола. TL; DR довольно хороший формат для описание спецификаций сообщений. Эти сообщения записываются в файлы с расширением .proto. Но на самом деле мы хотим работать с типами Хаскелла. Существует библиотека proto-lens, которая может принимать файлы, записанные в формате буферов протокола, анализировать эти файлы и генерировать модули Haskell, содержащие типы данных, представляющие эти сообщения. Эта генерация файлов должна быть выполнена до компиляции проекта. Итак, этот процесс описан в файле Setup.hs.