haskell github dependency-management cabal haskell-stack

Haskell Stack instala la dependencia del paquete desde github



install haskell stack (3)

En mi caso, quería depender de una bifurcación de pandoc, especificando un compromiso preciso. Funcionó agregando lo siguiente a stack.yml :

extra-deps: - archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip

Esto funcionaría con cualquier URL de tipo rama en Git. Encontré mi url explorando los archivos en la confirmación y copiando la URL desde el botón "Descargar ZIP".

Tenga en cuenta que mi rama tiene una versión específica, superior a cualquier versión que Stack pueda obtener del resolutor. Detallo la versión en las dependencias de Cabal. Si la versión de esa rama se superpondría con una disponible en el índice del resolvedor, no estoy seguro de cuál será la elegida

¿Es posible instalar una versión de un paquete desde github usando la pila Haskell?

por ejemplo, en un .cabal o stack.yaml , ¿cómo puedo señalar una dependencia en un repositorio / sucursal / revisión de git?


La documentación de la sección de packages stack.yaml proporciona ejemplos de referencias a ubicaciones de paquetes más complejas.

packages: - location: . - location: dir1/dir2 - location: https://example.com/foo/bar/baz-0.0.2.tar.gz - location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip - location: git: [email protected]:commercialhaskell/stack.git commit: 6a86ee32e5b869a877151f74064572225e1a0398 - location: hg: https://example.com/hg/repo commit: da39a3ee5e6b4b0d3255bfef95601890afd80709

Luego agregue extra-dep: true a la entrada del package solo para decirle a la stack no trate el código que ingresa como algo que está desarrollando (por ejemplo, no lo cargue en GHCi).


Nueva sintaxis para Stack> 1.7.1

Como comentó @Flip, los documentos en docs.haskellstack.org/en/stable/yaml_configuration/… aclaran la nueva sintaxis de su stack.yaml es:

extra-deps: - github: apolishch/prime_table commit: a510622a824af999a809191e8c959b8ea5fa8bdb - github: apolishch/reactive-banana commit: "74bac0f" subdirs: reactive-banana

Para que quede claro: las dependencias en su stack.yaml aseguran que los paquetes (que no están en Stackage) estén disponibles si algún archivo .cabal en su proyecto los quisiera, por si acaso.

Aún debe especificar el nombre del paquete en la build-depends en su archivo .cabal para decir que realmente depende del paquete.

Tenga en cuenta que no importa en qué rama está el commit, y los repos pueden ser forks. Cuando un paquete está en un subdirectorio, puede especificarlo; de lo contrario, se establecerá de forma predeterminada en el nivel superior.

Sintaxis para Stack> 1.6.0

extra-deps: - github: [email protected]:apolishch/prime_table.git commit: a510622a824af999a809191e8c959b8ea5fa8bdb

[Editar] He encontrado que a veces la sintaxis de 1.7.1 falla con un mensaje de error

C:/Users/username/AppData/Local/Programs/stack/x86_64-windows/ghc-8.4.3/lib/../mingw/bin/ar.exe: .stack-work/dist/7d103d30/build/objs-10648/libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory

y lo resolví utilizando la sintaxis 1.6.0, aunque estaba usando la pila 1.7.1. Cuando use Travis, fallará porque Travis no puede clonar a través de SSH sin sus claves SSH, por supuesto. Pero todavía puedes usar el enlace https como

extra-deps: - github: https://github.com/apolishch/prime_table.git commit: a510622a824af999a809191e8c959b8ea5fa8bdb