Haskell Language
Verwendung von GHCi
Suche…
Bemerkungen
GHCI ist das interaktive REPL, das im Lieferumfang von GHC enthalten ist.
Starten von GHCi
ghci
an einer Shell-Eingabeaufforderung ghci
ein, um GHCI zu starten.
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Prelude>
Ändern der Standardaufforderung für GHCi
Die Aufforderung von GHCI zeigt standardmäßig alle Module an, die Sie in Ihre interaktive Sitzung geladen haben. Wenn Sie viele Module geladen haben, kann dies lange dauern:
Prelude Data.List Control.Monad> -- etc
Der Befehl :set prompt
ändert die Eingabeaufforderung für diese interaktive Sitzung.
Prelude Data.List Control.Monad> :set prompt "foo> "
foo>
Um die Aufforderung dauerhaft zu ändern, fügen Sie Folgendes hinzu :set prompt "foo> "
in die GHCi-Konfigurationsdatei .
Die GHCi-Konfigurationsdatei
GHCi verwendet eine Konfigurationsdatei in ~/.ghci
. Eine Konfigurationsdatei besteht aus einer Folge von Befehlen, die GHCi beim Start ausführt.
$ echo ":set prompt \"foo> \"" > ~/.ghci
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from ~/.ghci
foo>
Laden einer Datei
Mit dem Befehl :l
oder :load
eine Datei geprüft und :load
.
$ echo "f = putStrLn \"example\"" > example.hs
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
ghci> :l example.hs
[1 of 1] Compiling Main ( example.hs, interpreted )
Ok, modules loaded: Main.
ghci> f
example
GHCi beenden
Sie können GHCi einfach mit :q
oder :quit
ghci> :q
Leaving GHCi.
ghci> :quit
Leaving GHCi.
Alternativ hat die Tastenkombination STRG + D ( Cmd + D für OSX) die gleiche Wirkung wie :q
.
Laden Sie eine bereits geladene Datei erneut
Wenn Sie eine Datei in GHCi geladen haben (z. B. mit :l filename.hs
) und Sie die Datei in einem Editor außerhalb von GHCi geändert haben, müssen Sie die Datei mit :r
oder :reload
reload neu laden, damit die Änderungen verwendet werden können Sie müssen den Dateinamen nicht erneut eingeben.
ghci> :r
OK, modules loaded: Main.
ghci> :reload
OK, modules loaded: Main.
Haltepunkte mit GHCi
GHCi unterstützt im Normalfall Haltepunkte mit interpretiertem Code (Code, der :loaded
).
Mit folgendem Programm:
-- mySum.hs
doSum n = do
putStrLn ("Counting to " ++ (show n))
let v = sum [1..n]
putStrLn ("sum to " ++ (show n) ++ " = " ++ (show v))
in GHCi geladen:
Prelude> :load mySum.hs
[1 of 1] Compiling Main ( mySum.hs, interpreted )
Ok, modules loaded: Main.
*Main>
Wir können jetzt Haltepunkte mit Zeilennummern setzen:
*Main> :break 2
Breakpoint 0 activated at mySum.hs:2:3-39
und GHCi stoppt bei der entsprechenden Zeile, wenn wir die Funktion ausführen:
*Main> doSum 12
Stopped at mySum.hs:2:3-39
_result :: IO () = _
n :: Integer = 12
[mySum.hs:2:3-39] *Main>
Es könnte verwirrend sein , wo wir im Programm sind, so können wir verwenden :list
zu klären:
[mySum.hs:2:3-39] *Main> :list
1 doSum n = do
2 putStrLn ("Counting to " ++ (show n)) -- GHCi will emphasise this line, as that's where we've stopped
3 let v = sum [1..n]
Wir können Variablen drucken und auch die Ausführung fortsetzen:
[mySum.hs:2:3-39] *Main> n
12
:continue
Counting to 12
sum to 12 = 78
*Main>
Mehrzeilige Anweisungen
Der Befehl :{
beginnt mit dem mehrzeiligen Modus und :}
beendet ihn. Im mehrzeiligen Modus interpretiert GHCi Zeilenumbrüche als Semikolons, nicht als Ende einer Anweisung.
ghci> :{
ghci| myFoldr f z [] = z
ghci| myFoldr f z (y:ys) = f y (myFoldr f z ys)
ghci| :}
ghci> :t myFoldr
myFoldr :: (a -> b -> b) -> b -> [a] -> b