2017-05-05 1 views
1

Ich versuche, den Code für "Haskell: Das Handwerk der funktionalen Programmierung", 3. Auflage zu installieren.Craft3e: Kabale Installation nicht im Anwendungsbereich: Applicative

Ich verwende GHCi, Version 7.6.3 auf Centos Version 7.

Dann:

cabal unpack Craft3e 
cd Craft3e-0.1.1.0/ 
cabal install 
... 
[29 of 67] Compiling CalcParseLib  (Calculator/CalcParseLib.hs, dist/build/CalcParseLib.o) 
Calculator/CalcParseLib.hs:132:10: 
Not in scope: type constructor or class `Applicative' 
Failed to install Craft3e-0.1.1.0 
cabal: Error: some packages failed to install: 
Craft3e-0.1.1.0 failed during the building phase. The exception was: 
ExitFailure 1 

ich diese Installation mehrfach versucht haben, kann aber diesen Fehler nicht überwinden.

Kann ich etwas anderes als "cabal install" verwenden?

Ich habe viel über Haskell zu lernen, bevor ich zu diesem Beispiel, komme, aber es wäre toll zu wissen, die Installation ist in Ordnung! :)

+0

Können Sie einen neueren GHC (> = 7.10) verwenden? Es sieht so aus, als ob dieses Paket nicht mit älteren Versionen getestet wurde. Ein Upgrade wäre einfacher, als es zu bearbeiten, um es kompilieren zu lassen. –

+0

Ja, die Aktualisierung funktioniert. Ich aktualisierte zu einem ghc 8.0.2. Ich hatte einige Probleme mit der Transaktionssperre, aber ich habe gerade neu gestartet und es wurde aufgeräumt. –

Antwort

1

Sie haben drei Möglichkeiten:

  1. Installieren an older version of the Craft3e package, mit z.B. cabal unpack Craft3e-0.1.0.10.

  2. finden Calculator/CalcParseLib.hs in den Quelldateien, die Sie mit cabal unpack heruntergeladen haben, und ein Add ...

    import Control.Applicative 
    

    ... Linie neben den anderen import Zeilen am Anfang. Ich vermute, dass Sie dasselbe mit anderen Modulen machen müssen, wenn der gleiche Fehler an anderer Stelle auftritt, nachdem Sie diese Änderung vorgenommen haben, und es könnte andere Probleme ähnlicher Natur geben.

  3. Installieren Sie eine neuere Version von GHC (7.6.3 ist von 2013). Obwohl die Standard-CentOS-Repositories dies nicht bieten, gibt es andere Optionen, wie ein inoffizielles Fedora-Repository und eine manuelle Installation. Anweisungen finden Sie unter this page.

# 3 ist die endgültige Lösung. Wenn Sie jetzt nur mit dem Buch beginnen möchten, können Sie für # 1 gehen und die Neuinstallation für später verlassen.


Aus Gründen der Referenz, hier eine kurze Erklärung des Problems (ich einige unbekannte Begriffe verwenden, aber Sie werden bald genug über sie erfahren, wie Sie Haskell-Studie). Es gibt eine wichtige Typklasse namens Applicative, die aus historischen Gründen nicht so gut in die übrigen Kernbibliotheken integriert wurde, wie sie sein sollte. Diese Situation wurde in GHC 7.10 korrigiert, die beide Applicative im Prelude (das Modul, das standardmäßig in Haskell-Programme importiert wird) enthalten und es notwendig gemacht hat, Instanzen an mehreren Stellen hinzuzufügen, an denen sie fehlten. Der Code in dem Craft3e Paket wurde aktualisiert, so dass diese Applicative Instanzen anstelle (vgl this entry in the book's blog) waren, aber die import Control.Applicative Linie, die notwendig wäre, um die aktualisierte Code Arbeit in älterer GHCs zu machen, die nicht Applicative im Prelude haben Sie , wurde nicht hinzugefügt, was zu dem Fehler führt, den Sie sehen.

+0

Ja, das funktioniert.Ich habe auf eine ghc aktualisiert 7.6.3. Ich hatte einige Probleme mit der Transaktionssperre, aber ich habe gerade neu gestartet und es wurde aufgeräumt. Ich hoffe, dass ich Ihnen in der Zukunft gute Aufmerksamkeit schenken kann, indem ich anderen helfe. :);) –

+0

@TrailingDots Froh, dass es geholfen hat! Nur eine Sache über deinen Kommentar: vielleicht meintest du, dass du einen neueren GHC (wie das aktuelle 8.0.2) installiert hast, wie es bei 7.6.3 war? – duplode

+0

Ups - Sie haben Recht. Ich habe jetzt ghci 8.0.2. –