haskell - how - cabal: ¿cómo actualizar automáticamente el campo de compilación depende del archivo.cabal?
how to install haskell libraries (2)
¿Hay alguna manera de actualizar automáticamente el campo de compilación depende del archivo .cabal ? Por ejemplo, si comenzamos con el siguiente archivo .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
Luego, instale un paquete:
cabal install warp
Ahora, tengo que agregar warp >=3.0 && <3.1
al campo build-depends
la build-depends
, para que el archivo se vea así:
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
Mi pregunta es: ¿cómo actualizamos este archivo automáticamente?
Hay dos herramientas en la cabal-install
moderna de cabal-install
para ayudar con la administración de los límites de las dependencias. Primero están gen-bounds
que sugieren rangos de versión adecuados para paquetes basados en las especificaciones de las versiones instaladas actualmente. El segundo está outdated
, lo que enumera las dependencias en el archivo cabal
para las que existen nuevas versiones en hackage
. Ambos están documentados en el manual de Cabal: https://www.haskell.org/cabal/users-guide/developing-packages.html#generating-dependency-version-bounds
Una posible alternativa es usar hpack, yaml, sponge y jq:
Necesitará el archivo hpack package.yaml.
Por ejemplo para agregar aeson
como una dependencia:
cp package.yaml package.yaml.backup && (yaml2json package.yaml | jq ''.dependencies += ["aeson"]'' | json2yaml | sponge package.yaml ) && hpack