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