cabal: как автоматически обновлять поле build-depends в файле .cabal?

Есть ли способ автоматически обновлять поле build-depends в .cabal-файле? Например, если мы начнем со следующего файла .cabal:

name:           HUnit
version:        1.1.1
synopsis:       A unit testing framework for Haskell
homepage:       http://hunit.sourceforge.net/
category:       Testing
author:         Dean Herington
license:        BSD3
license-file:   LICENSE
cabal-version:  >= 1.10
build-type:     Simple

library
  build-depends:      base >= 2 && < 4
  exposed-modules:    Test.HUnit.Base, Test.HUnit.Lang,
                      Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
  default-extensions: CPP

Затем установите пакет:

cabal install warp

Теперь мне нужно добавить warp >=3.0 && <3.1 в поле build-depends, чтобы файл выглядел так:

name:           HUnit
version:        1.1.1
synopsis:       A unit testing framework for Haskell
homepage:       http://hunit.sourceforge.net/
category:       Testing
author:         Dean Herington
license:        BSD3
license-file:   LICENSE
cabal-version:  >= 1.10
build-type:     Simple

library
  build-depends:      base >= 2 && < 4, warp >=3.0 && <3.1
  exposed-modules:    Test.HUnit.Base, Test.HUnit.Lang,
                      Test.HUnit.Terminal, Test.HUnit.Text, Test.HUnit
  default-extensions: CPP

Мой вопрос: как мы можем обновить этот файл автоматически?


person Marcus Vinícius Monteiro    schedule 14.05.2015    source источник
comment
emacs haskell-mode делает это для меня, но я не знаю общего решения.   -  person Rein Henrichs    schedule 15.05.2015
comment
@ReinHenrichs Я думаю, что код функции, о которой вы упомянули, таков: haskell-mode на github, найдите defun haskell-cabal-section-add-build-dependency. Интересно, сделали ли участники клики что-то подобное.   -  person Marcus Vinícius Monteiro    schedule 15.05.2015
comment
Автоматически? На основании чего? Конечно, вы не хотите, чтобы ВСЕ ваши установленные пакеты были в зависимости от вашей сборки?   -  person Cubic    schedule 15.05.2015
comment
@TaylorFausak Спасибо, но как узнать, что изменения были добавлены вручную?   -  person Marcus Vinícius Monteiro    schedule 15.05.2015
comment
Я не. Я предполагаю, основываясь на своем опыте работы с файлами Cabal в моих собственных проектах.   -  person Taylor Fausak    schedule 15.05.2015
comment
Также стоит отметить, что Cab (оболочка Cabal) не есть эта функция. Однако для этого есть проблема.   -  person Taylor Fausak    schedule 15.05.2015


Ответы (2)


В современном cabal-install есть два инструмента для помощи в управлении границами зависимостей. Во-первых, это gen-bounds, который предлагает правильные диапазоны версий для пакетов на основе спецификаций версий, установленных в настоящее время. Второй — outdated, в котором перечислены зависимости в файле cabal, для которых существуют более новые версии на hackage. Оба задокументированы в руководстве клики: https://www.haskell.org/cabal/users-guide/developing-packages.html#generating-dependency-version-bounds

person sclv    schedule 06.02.2018

Возможная альтернатива — использовать hpack, yaml, губку и jq:

Вам понадобится файл hpack package.yaml.

Например, чтобы добавить aeson в качестве зависимости:

cp package.yaml package.yaml.backup && (yaml2json package.yaml | jq '.dependencies += ["aeson"]' | json2yaml | sponge package.yaml ) && hpack
person Chris Stryczynski    schedule 26.02.2018