Как я могу автоматически обновить автоматически сгенерированные записи файлов .cabal и stack.yaml? - PullRequest
2 голосов
/ 05 августа 2020

Значительная часть файлов stack.yaml и project.cabal автоматически генерируется cabal init и stack init соответственно.

Когда я редактирую исходный код проекта, некоторые из этих записей могут нуждаться в

В частности, зависимости в stack.yaml и project.cabal, а также в записях project.cabal other-extensions и visible-modules должны обновляться автоматически.

Как мне сделать это автоматически без затирания?

1 Ответ

0 голосов
/ 06 августа 2020

Прежде всего, вы ищете не stack init, а stack new. Создание stack.yaml не должно быть вашей целью, вместо этого следует сосредоточить внимание на создании project.cabal или package.yaml (если вам нравится hpack). Причина этого в том, что файл cabal специфицирует фактические зависимости, а также все остальные шаблоны, в то время как stack init использует эту информацию из файла cabal для определения возможного преобразователя, и вы не можете автоматизировать этот процесс с помощью простой интерполяции шаблона. в одиночестве. В то же время генерация project.cabal и всех других файлов в новом проекте имеет очень хорошее решение в stack.

Вы можете создать репозиторий, подобный этому, в своей учетной записи github (имя важно): шаблоны стека , содержащие .hsfiles, которые описывают, какие файлы необходимо сгенерировать и как. Затем вы можете использовать его напрямую с stack, например, для указанного выше репо я могу:

$ stack new my-new-project github:lehins/lehins-ghc-7

Для команды new есть различные параметры, одна из которых предоставляет пользовательские переменные, которые может быть очень полезным для того, чего вы пытаетесь достичь.

Опять же, предостережение в том, что stack.yaml - единственный файл, который создается stack без использования шаблона, но это сделано намеренно и легко чтобы настроить его позже.

Изменить

@ leftaroundabout указал, что вопрос касался обновления , а не создания файлов. Единственный способ, которым я когда-либо рекомендовал бы выполнять такую ​​операцию, - это декларативный способ повторного создания файла с нуля вместо императивного подхода к изменению существующего файла. Не уверен насчет cabal init, но со стеком это так же просто, как запустить stack new еще раз:

$ cd my-new -project
$ stack new --bare --force -p var:newval my-new-project github:lehins/lehins-ghc-7

Уловка заключается в том, что вы либо передаете новые значения для существующих переменных в шаблоне, либо изменяете сам шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...