2014-05-07 7 views
5

Ich habe gerade ein Kabale Update und versuchte, 'Objektiv' aus dem hackage zu installieren. Das gab mir den folgenden Fehler -Kabale Abhängigkeit Auflösung fail für 'Objektiv'

$ 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 

So sieht aus wie Mtl-2.0.1.0 ist gebrochen. Allerdings zeigt eine weitere Abhängigkeitsverfolgung, dass nichts in der Objektivpaketdefinition tatsächlich von dieser Version von mtl abhängt. Infact, das nächste, was ich versuchte, war -

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

Und das gelingt ohne Probleme.

Warum sollte Cabal versuchen, mtl-2.0.1.0 bei der Installation lens direkt installieren? Ich habe versucht, meine .ghc und .cabal Verzeichnisse zu entfernen und die Schritte mit den gleichen Ergebnissen zu wiederholen. Die Kabale Version, die ich benutze, ist 1.16 -

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

Dies wird im Zusammenhang mit das letzte Update von 'Transformatoren'. Wenn Sie ein paar Tage warten können, bis die Pakete, die von 'transformers 'abhängig sind, aktualisiert werden, sollten Sie keine Probleme beim Installieren von' lens' bekommen. –

+0

@DannyNavarro Nun, ich habe geschafft, Linse mit der oben genannten Methode installiert zu bekommen. Die Frage ist mehr von einem - warum, wenn 'cabal install lens' versagt, würde' cabal Installation von aeson && cabal install free && cabal install lens' arbeiten? –

+0

Ich denke, es funktioniert, weil Sie durch die Installation von 'free 'und' aeson '' cabal' zwingen, die installierten Versionen zu verwenden, anstatt sie selbst auszuwählen. Es scheint eine Paketversion auszuwählen, die 'mtl-2.0.1.0' verwendet. Vielleicht ist es eine obere Grenze in 'Aeson' oder' freien' Abhängigkeiten, aber höchstwahrscheinlich wird es ein anderes Paket tiefer im Abhängigkeitsgraphen sein. –

Antwort

0

Ich hammed gegen diesen Fehler auch. Ich denke, ich habe es geschafft, es jetzt zu beheben, indem Sie manuell mtl-2.0.1.0 entpacken, catch explizit hinzufügen, um die Importliste von Control.Exception in Control/Monad/Error/Class.hs (L: 55), dann cabal install ausgeführt werden.

Danach konnte ich cabal install lens ausführen. Es würde mich interessieren, ob das auch für dich funktioniert!

1

Die Abhilfe, die ich verwende ist mit den Transformatoren 3 flag Transformatoren-compat zu installieren ersten

$ cabal install -ftransformer3 transformers-compat 

und installiert Objektiv mit den Transformatoren 0.3.0.0 constraint

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