Прежде всего, вы ищете не 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
Уловка заключается в том, что вы либо передаете новые значения для существующих переменных в шаблоне, либо изменяете сам шаблон.