Pregunta

En la sección de dependencias de un archivo de Cabal:

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0

¿Debo estar haciendo algo como

Build-Depends: base >= 3 && < 5, transformers >= 0.2.0 && < 0.3.0

(poniendo límites superiores en las versiones de los paquetes que dependen)

o no?

voy a utilizar un ejemplo real: mi paquete "Lista" en la Hackage (mónada lista transformador y clase)

  • Si no pongo el límite - mi paquete puede romperse por un cambio en "Transformers"
  • Si yo pongo el límite - un usuario que utiliza "transformadores", pero está utilizando una versión más reciente de ella no será capaz de utilizar lift y liftIO con ListT porque sólo es una instancia de estas clases de transformadores-0.2.x

supongo que las aplicaciones siempre deben poner límites superiores para que nunca se rompen, por lo que esta cuestión es sólo alrededor de bibliotecas:

¿Debo usar el límite superior de la versión dependencias o no?

¿Fue útil?

Solución

Hay una recomendar límites superior - véase en particular la sección 3 ( "Dependencias en Cabal "). Las otras respuestas dan alguna otra justificación para esta política.

En resumen - el límite superior debe estar en forma de < A.(B+1) donde A y B son los primeros elementos de la versión actual (A.B.C...). Esto se debe a que el aumento de A.B debe significar que la versión rompe viejos API.

Otros consejos

Piense en los modos de fallo:

  • Con el límite superior, ya sea su paquete construye o bala cabal sobre una dependencia de construcción insatisfecho. La culpa está claramente asignado.

  • Sin el límite superior, el cliente tiene una versión reciente de transformadores y no es compatible con versiones anteriores. Su software no acumulación; bala GHC acerca de cómo su código no compila. Su software se ve de mala calidad.

Poner en el límite superior.

poner límites superiores de la OMI sobre los números de versión aceptada es lo que hay que hacer. Teniendo en cuenta la semántica de los números de versión utilizados por Hackage ciertamente no hay garantía de que su paquete trabajará con, en este caso, transformadores 0.3.0.

No he visto ninguna discusión real acerca de esto, sin embargo, y no parece ser una recomendación general a utilizar cotas superiores a excepción del paquete base.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top