Что такое пакет.и YAML и стек.и YAML и установка.hs & the-project-name.файлы Кабал-клана?

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

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

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

1 ответов


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

интернет-проекта-Имя.Кабал

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

пакета.и YAML

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

стек.и YAML

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

настройка.hs

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

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