Что такое пакет.ямл и стек.ямл и настройка.УГ и-имя проекта.файлы Кабал-клана?
Я обнаружил, что при использовании команды 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.