2010-11-06 14 views
8

Cabal tiene problemas de dependencia constantemente. Es realmente agotador. Hasta ahora he tratado de conseguir muchas cosas de trabajo, aquí está mi tratando de instalar complemento:Uso de Cabal (Haskell)

 
$ sudo cabal install snap-server 
Resolving dependencies... 
cabal: cannot configure ListLike-1.1.0. It requires mtl >=1.1.0 && 1.2 
For the dependency on mtl >=1.1.0 && 1.2 there are these packages: 
mtl-1.1.0.0, mtl-1.1.0.1, mtl-1.1.0.2 and mtl-1.1.1.0. However none of them 
are available. 
mtl-1.1.0.0 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.0 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.0.1 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.1 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.0.2 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.0.2 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 
mtl-1.1.1.0 was excluded because mtl-2.0.0.0 was selected instead 
mtl-1.1.1.0 was excluded because monads-fd-0.1.0.3 requires mtl ==2.* 

he problemas similares instalar Happstack, etc. ¿Cuál es el procedimiento para hacer Cabal ... trabajo? Ya he probado:

export PATH=/home/user/.cabal/bin:$PATH 

Respuesta

7

El problema es que snap-server-0.2.15 tiene una dependencia sin límites en mónadas-fd. La versión más reciente, monads-fd-0.1.0.3, requiere mtl-2. * Desafortunadamente, esto entra en conflicto con la dependencia de ListLike (a través de iteratee), que requiere mtl < 2.0. Ambas limitaciones no se pueden cumplir simultáneamente, por lo que Cabal se da por vencido.

Intenta ejecutar cabal install snap-server --constrain="monads-fd=0.1.0.2". Eso forzará una versión anterior de mónadas-fd que no requiere mtl, y creo que todo funcionará correctamente.

Si tiene problemas con muchos paquetes, es probable que se deba al nuevo mtl que se cargó recientemente. Puede intentar agregar --constrain="mtl<2", que podría ayudar.

Moral para los encargados de mantenimiento: seguir la Haskell PVP y siempre usar los límites superiores de dependencia.

N.B. Aunque cargue un nuevo ListLike que funcione con mtl-2 (lo cual haré muy pronto), eso no solucionará su problema porque el nuevo ListLike no se seleccionará debido al límite superior en iteratee.

+0

"Aunque cargue un nuevo ListLike ..., eso no solucionará su problema" Moraleja: nunca utilice límites superiores. Broma :) Parece que necesitamos algo más estable que piratería y menos estable que HP. Algo en el medio. – Yuras

+1

@Yuras, estoy de acuerdo (y me di cuenta de que los límites superiores impedían una solución mientras escribía). Si el pirateo requiriera límites superiores en todo, contribuiría mucho a mejorar la estabilidad. Cuanto más trabajo con cabal y números de versión, más convencido estoy de que los autotools lo hicieron bien. –

+0

¡Yikes, cabal requiere mucho conocimiento sobre los paquetes a usar! Eso me entristece :-( – 0atman

Cuestiones relacionadas