Что такое пакет.ямл и стек.ямл и настройка.УГ и-имя проекта.файлы Кабал-клана?
Я обнаружил, что при использовании команды stack new the-project-name new-template
многие файлы генерируются в новый каталог. и я замечаю следующие 4 специальных файла:
package.yaml
stack.yaml
Setup.hs
the-project-name.cabal
Эти 4 файла, похоже, предназначены для предоставления метаданных для программного обеспечения для управления пакетами, но они выглядят запутанными, я имею в виду, почему их 4, Почему не один, и в чем разница между ними?
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
.