instalar how haskell cabal

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