instalar haskell cabal

haskell - instalar - ¿Hay alguna forma de definir banderas para dependencias de la camarilla?



instalar cabal (5)

Hace poco me encontré con un "infierno de Cabal"

Esto no es "infierno de la camarilla".

Con una instalación de cabal moderna, puedes poner

constraints: hmatrix +openblas

en su archivo cabal.project.local o cabal.project . Esto evita la pila.

¿Hay alguna forma de indicar en el archivo .cabal de mi aplicación que dependo de una biblioteca para que se compile con el indicador de compilación específico?

No, pero en su caso, esto no es realmente un problema en el solucionador y es más bien un error poco informativo (causado por el uso poco inteligente de las banderas).

Recientemente me encontré con un problema de "cabal hell" que solo pude resolver mediante la instalación manual de transformers-compat con la -f transformers3 en mi caja de arena de Cabal antes de ejecutar cabal install para mi proyecto.

¿Hay alguna forma de indicar en el archivo .cabal mi aplicación que dependo de una biblioteca para que se compile con el indicador de compilación específico?


Hay un par de formas para restringir la versión para la instalación.

  1. Agregue límites inferiores y superiores a las versiones del paquete en el archivo cabal como Mikhail mencionado anteriormente, ejemplo de tal archivo aquí

  2. Además, puede anular la configuración en el archivo .cabal con la cabal install --constraint="bar-2.1" la bandera cabal install --constraint="bar-2.1"

Para eliminar una versión específica de un paquete:

  • En un sandbox, puede anular el registro de una versión con cabal sandbox hc-pkg unregister bar-2.1
  • El registro global se puede hacer con este comando fuera de sandbox ghc-pkg unregister bar-2.1

La forma moderna de hacer esto es usar Stack . Edita tu stack.yaml para incluir

flags: transformers-compat: transformers3: true

Véase también la sección de flags .


También luché durante mucho tiempo para encontrar una solución a este problema. ¡Acabo de encontrar uno! Debe modificar el archivo de configuración global cabal en ~ / .cabal / config. Agregue una línea como esta a la sección inicial del archivo:

Restricciones: hmatrix + openblas

Esto habilita el indicador de openblas para el paquete hmatrix. Se utilizará automáticamente la próxima vez que se instale el paquete. Si hay una manera de establecer una marca local para un arenero, no podría encontrarla.


[Copiado de la sección de comentarios.]

Parece que no es posible especificar una dependencia de este tipo a través del campo de build-depends en su archivo .cabal . buildDepends se define como [Dependency] , donde data Dependency = Dependency PackageName VersionRange . Sin embargo, puede usar cabal install --constraint="transformers-compat +transformers3" .

Mirando el archivo transformers-compat.cabal , creo que el solucionador debería poder determinar la asignación de bandera correcta si limita su dependencia de los transformers apropiada. Por ejemplo, build-depends: transformers >= 0.3 && < 0.4 debe obligar al solucionador a elegir transformers-compat +transformers3 . Si esto no funciona, puede ser un error en el solucionador.

Aparte: llamar a cualquier tipo de problema técnico con Cabal "Cabal hell" no es muy informativo. Sería más fácil ayudarlo si describiera qué mensaje de error estaba recibiendo.