2014-05-07 4 views
5

Ho appena effettuato un aggiornamento di cabal e ho provato a installare 'lens' da hackage. Questo mi ha dato il seguente errore -risoluzione delle dipendenze cabal non riuscita per 'obiettivo'

$ cabal install -j lens 
Resolving dependencies... 
Configuring dlist-0.7.0.1... 
... <snip> 
Configuring mtl-2.0.1.0... 
Building mtl-2.0.1.0... 
Failed to install mtl-2.0.1.0 
Last 10 lines of the build log (/home/aj/.cabal/logs/mtl-2.0.1.0.log): 
Building mtl-2.0.1.0... 
Preprocessing library mtl-2.0.1.0... 
[ 1 of 21] Compiling Control.Monad.Writer.Class (
Control/Monad/Writer/Class.hs, dist/build/Control/Monad/Writer/Class.o) 
[ 2 of 21] Compiling Control.Monad.State.Class (Control/Monad/State/Class.hs, 
dist/build/Control/Monad/State/Class.o) 
[ 3 of 21] Compiling Control.Monad.Reader.Class (
Control/Monad/Reader/Class.hs, dist/build/Control/Monad/Reader/Class.o) 
[ 4 of 21] Compiling Control.Monad.RWS.Class (Control/Monad/RWS/Class.hs, 
dist/build/Control/Monad/RWS/Class.o) 
[ 5 of 21] Compiling Control.Monad.Identity (Control/Monad/Identity.hs, 
dist/build/Control/Monad/Identity.o) 
[ 6 of 21] Compiling Control.Monad.Error.Class (Control/Monad/Error/Class.hs, 
dist/build/Control/Monad/Error/Class.o) 
Control/Monad/Error/Class.hs:93:18: Not in scope: `catch' 
... <snip> 
cabal: Error: some packages failed to install: 
aeson-0.7.0.3 depends on mtl-2.0.1.0 which failed to install. 
exceptions-0.6 depends on mtl-2.0.1.0 which failed to install. 
free-4.7.1 depends on mtl-2.0.1.0 which failed to install. 
lens-4.1.2 depends on mtl-2.0.1.0 which failed to install. 
mtl-2.0.1.0 failed during the building phase. The exception was: 
ExitFailure 1 

Quindi sembra che mtl-2.0.1.0 sia danneggiato. Tuttavia, un ulteriore tracciamento delle dipendenze rivela che nulla nella definizione del pacchetto obiettivo dipende effettivamente da quella versione di mtl. Infatti, la prossima cosa che ho provato è stata -

$ cabal install -j aeson 
$ cabal install -j free 
$ cabal install -j lens 

E che succede senza problemi.

Quindi, perché la cabala tenta di installare mtl-2.0.1.0 durante l'installazione di lens direttamente? Ho provato a rimuovere le mie directory .ghc e .cabal e a ripetere i passaggi, con gli stessi risultati. La versione cabal che sto usando è 1.16 -

$ cabal -V 
cabal-install version 1.16.0.2 
using version 1.16.0 of the Cabal library 
+0

Ciò è dovuto il recente aggiornamento di 'transformers'. Se potessi aspettare qualche giorno finché i pacchetti a seconda dei 'transformers' non saranno aggiornati, non dovresti avere problemi con l'installazione di' lens'. –

+0

@DannyNavarro Beh, sono riuscito a far installare la lente usando il metodo sopra. La domanda è più di un - perché, se 'cabal install lens' fallisce, la' cabal installerà aeson && cabal install free && cabal install lens' lavoro? –

+0

Immagino che funzioni perché, installando prima 'free' e' aeson', costringi 'cabal' a usare le versioni installate, invece di selezionarle da sole. Sembra scegliere una versione del pacchetto che usa 'mtl-2.0.1.0'. Forse è un limite superiore nelle dipendenze 'aeson' o' free', ma molto probabilmente sarà qualche altro pacchetto più profondo nel grafico delle dipendenze. –

risposta

0

Ho anche provato questo errore. Penso di essere riuscito a risolverlo ora disimballando manualmente mtl-2.0.1.0, aggiungendo esplicitamente catch all'elenco di importazione di Control.Exception in Control/Monad/Error/Class.hs (L: 55), quindi in esecuzione cabal install.

Successivamente, sono stato in grado di eseguire cabal install lens. Sarei interessato a sapere se funziona anche per te!

1

La soluzione che sto usando è installare prima trasformatori-compat con i trasformatori 3 flag

$ cabal install -ftransformer3 transformers-compat 

e quindi installare lente con i trasformatori 0.3.0.0 vincolo

$ cabal install --constraint="transformers==0.3.0.0" lens