¿Hay alguna manera de definir indicadores para las dependencias de cabal?


Recientemente me encontré con un problema de "infierno cabal" que solo logré resolver instalando manualmentetransformers-compat con la bandera -f transformers3 en mi entorno de pruebas cabal antes de ejecutar cabal install para mi proyecto.

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

Author: shang, 2014-05-07

5 answers

La forma moderna de hacer esto es usar Stack. Edite su stack.yaml para incluir

flags:
  transformers-compat:
    transformers3: true

Véase también la sección sobre banderas.

 7
Author: Christopher Monsanto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-01 06:01:54

[Copiado de la sección de comentarios.]

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

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

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

 15
Author: Mikhail Glushenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-21 15:53:35

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

Restricciones: hmatrix + openblas

Esto habilita el indicador openblas para el paquete hmatrix. Se utilizará automáticamente la próxima vez que se instale el paquete. Si hay una manera de establecer tal bandera localmente para un sandbox, no pude encontrar se.

 9
Author: Carlos Reyes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-29 20:21:47

Recientemente me encontré con un problema de" infierno de la cábala "

Esto no es "el infierno de la cábala."

Con una instalación moderna cabal, puede poner

constraints: hmatrix +openblas

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

Hay alguna manera de indicar en mi solicitud .archivo cabal que dependo de una biblioteca para que se construya con la bandera de compilación específica?

No, pero en su caso esto no es realmente un problema en el solucionador y es más bien y poco informativo error (causado por los usos menos que juiciosos de las banderas de alguien).

 4
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-13 01:28:19

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

  1. Agregue límites inferiores y superiores a las versiones de paquetes 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 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
  • La anulación del registro global se puede hacer con este comando fuera de sandbox ghc-pkg unregister bar-2.1
 -2
Author: katychuang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:29:27