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
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'. –
@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? –
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. –