2012-05-07 3 views
5

Nachdem ich auf ghc 7.4 aktualisiert habe, musste ich import System aus verschiedenen Skripten entfernen, aber das macht sie inkompatibel mit runhaskell aus GHC 6.0, das immer noch in vielen Umgebungen verwendet wird.runhaskell - wie man ein Skript mit ghc 7.4 und 6 kompatibel macht?

Gibt es eine Möglichkeit, beide Versionen zu unterstützen?

Die Botschaft, die ich bekomme, wenn ich ein Skript mit import System in ghc 7.4 laufen:

% ./script.hs 
    Could not find module `System' 
    It is a member of the hidden package `haskell98-2.0.0.1'. 
    Use -v to see a list of the files searched for. 
+3

Warum wird GHC 6.0 noch verwendet? Es ist von 2003. –

+0

Ich würde sagen, '{- # Language CPP # -}' mit [die üblichen Manipulationen] (http://hackage.haskell.org/packages/archive/containers/0.5.0.0/doc/html /src/Data-Graph.html), aber ich denke nicht, dass GHC-6.0 diese Art des Schreibens unterstützt :) Beachten Sie, dass sogar die neuesten Umarmungen das hierarchische Benennungsschema unterstützen. – applicative

Antwort

5

Das System Modul war ein alter Haskell-98 Kompatibilitätsmodul und alle seine Funktionen in den System.Cmd, System.Environment und System.Exit Module gefunden werden, die seit mindestens so weit zurück wie GHC 5.04 verfügbar alles gewesen sein, so soll es sein eine einfache Sache, nur Ihre Importanweisungen zu reparieren, um stattdessen eine geeignete Teilmenge dieser Module zu verwenden.

+0

Ich habe 'System.Process' verwendet, um' system' zu importieren; 'System.Cmd' ist der kompatible Weg, danke! – Penz

6

Das System Modul eine veraltete nicht-hierarchisches Haskell 98-Modul ist; Sie sollten stattdessen die relevanten hierarchischen Module (wie System.Environment, System.IO und System.Exit; siehe base package für eine vollständige Liste) importieren, die Sie stattdessen benötigen. Der einfachste Weg, dies zu erreichen, ist, einfach den System Import zu entfernen und Hoogle zu verwenden, um herauszufinden, welche Module die benötigten Definitionen aus den Compilerfehlern enthalten.

In älteren GHCs konnten Haskell 98 Module zusammen mit hierarchischen Modulen verwendet werden, dies ist jedoch nicht mehr möglich. Das Ändern der Importe sollte relativ einfach sein und Ihr Programm mit dem neuesten Haskell 2010-Standard auf den neuesten Stand bringen.