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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow