So führen Sie eine Haskell-Datei im interpretierten Modus aus

75

Mir wurde gesagt, dass Sie Haskell-Dateien interpretieren können (was meiner Meinung nach bedeutet, dass sie wie Ruby / Python / Perl funktionieren). Ich kann die Befehlszeilenoption auf GHC dafür jedoch nicht finden. Es möchte immer meine Datei kompilieren. Ich habe mir auch GHCi angesehen, aber es bringt mich immer in eine Antwort.

Ich möchte im Grunde nur tun ghc -i MyFile.hs(wobei -i ein erfundenes Flag ist, das ich als Korrelate für den interpretierten Modus vortäusche) und es ausführen lassen, damit ich schnelles Feedback erhalten kann, während ich Ideen ausprobiere und lerne.

Joshua Cheek
quelle
1
Ghci hat viel zu bieten: Es macht es sehr einfach, kleine Teile Ihres Programms zu testen. Ich persönlich habe nur die Angewohnheit, ghci zum Testen von Dingen zu verwenden. Sie können die mainAktion der obersten Ebene weiterhin ausführen, mainindem :mainSie Folgendes eingeben (oder verwenden, wenn Sie Befehlszeilenargumente übergeben müssen).
Daniel Wagner

Antworten:

124
$ runhaskell MyFile.hs

Alternativ runghc(sie sind das gleiche). ghci MyFile.hsstartet auch eine interaktive REPL-Sitzung mit MyFile.hsgeladen, aber wenn Sie ein Hauptprogramm ausführen möchten, runhaskellist der richtige Weg.

Es ist wahrscheinlich eine gute Idee, sich daran zu gewöhnen, Teile Ihres Programms als isolierte Einheiten in GHCi zu testen, anstatt jedes Mal das Ganze auszuführen, aber für kürzere Skripte ist es natürlich am einfachsten und einfachsten, nur das Ganze auszuführen.

ehird
quelle
2
Aus welchem ​​Grund auch immer (Haskell-Plattform unter OSX), runhaskellist nicht auf meinem Weg, sondern runghcwar. (also +1 für die Erwähnung runghc)
derekv
1
Ich weiß, dass dieser Thread schon lange geschlossen ist, aber ist der Runhaskell-Interpreter jit kompiliert?
Nbroeking
39

Sie können ein Skript wie dieses haben:

#!/usr/bin/env runhaskell
main = putStrLn "hello world"

Nachdem Sie die Datei ausführbar gemacht haben (dh chmod +x haskell_script), können Sie sie wie jedes andere Shell-Skript ausführen.

David Miani
quelle
4
Nicht ganz wie jedes andere Shell-Skript. Der Rückgabewert des zuletzt ausgeführten Ausdrucks wird, falls nicht (), automatisch von ausgegeben runhaskell, genau wie in GHCi. Das passiert nicht mit einer tatsächlichen ausführbaren Datei, die normalerweise mit kompiliert wird ghc.
Mark Reed
@ MarkReed Könnten Sie ein Beispiel geben?
Linus Arver
Ich könnte mir vielleicht eine künstliche einfallen lassen, aber es würde mir schwer fallen, dies zu tun. Es ist nicht wirklich ein praktisches Problem, da Sie möchten, dass die meisten Skripte ohnehin eine Art E / A als letzte Aktion ausführen. Ich dachte nur, dass es erwähnenswert ist.
Mark Reed
11

Öffnen Sie den GHC-Interpreter, indem Sie ihn ghciin einem Terminal ausführen, und laden Sie dann eine Dateitypisierung :load example.hs. Weitere Details unter diesem Link .

Óscar López
quelle
1

So führen Sie den in eine Datei geschriebenen Code aus myfile.txt, der beispielsweise einfache Codezeilen enthält, die im GHC-Interpreter funktionieren, wie z.

let a = 0 in a:[1,2]
let x = [1,2] in x ++ [3,4]

du kannst tun:

ghc -e ':script myfile.txt'

Bearbeiten

Unter Windows sind doppelte Anführungszeichen erforderlich:

ghc -e ":script myfile.txt"

Stattdessen kann man auch öffnen GHCiund tun :script myfile.txt.

Stéphane Laurent
quelle