Zoeken…


Opmerkingen

GHCI is de interactieve REPL die wordt geleverd met GHC.

GHCi starten

Typ ghci bij een shell-prompt om GHCI te starten.

$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Prelude> 

De GHCi-standaardprompt wijzigen

Standaard toont de prompt van GHCI alle modules die u in uw interactieve sessie hebt geladen. Als je veel modules hebt geladen, kan dit lang duren:

Prelude Data.List Control.Monad> -- etc

De opdracht :set prompt wijzigt de prompt voor deze interactieve sessie.

Prelude Data.List Control.Monad> :set prompt "foo> "
foo> 

Om de prompt permanent te wijzigen, voeg je toe :set prompt "foo> " aan het GHCi-configuratiebestand .

Het GHCi-configuratiebestand

GHCi gebruikt een configuratiebestand in ~/.ghci . Een configuratiebestand bestaat uit een reeks opdrachten die GHCi bij het opstarten uitvoert.

$ echo ":set prompt \"foo> \"" > ~/.ghci
$ ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from ~/.ghci
foo> 

Een bestand laden

De :l of :load opdracht controleert en laadt een bestand.

$ 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 afsluiten

U kunt GHCi eenvoudig afsluiten met :q of :quit

ghci> :q
Leaving GHCi.

ghci> :quit
Leaving GHCi.

Als alternatief heeft de sneltoets CTRL + D ( Cmd + D voor OSX) hetzelfde effect als :q .

Een al geladen bestand opnieuw laden

Als u een bestand in GHCi hebt geladen (bijvoorbeeld met :l filename.hs ) en u het bestand in een editor buiten GHCi hebt gewijzigd, moet u het bestand opnieuw laden met :r of :reload om de wijzigingen te kunnen gebruiken, vandaar u hoeft de bestandsnaam niet opnieuw te typen.

ghci> :r
OK, modules loaded: Main.

ghci> :reload
OK, modules loaded: Main.

Breekpunten met GHCi

GHCi ondersteunt out-of-the-box imperatief-stijl breekpunten met geïnterpreteerde code (code die is :loaded ).

Met het volgende programma:

-- mySum.hs
doSum n = do
  putStrLn ("Counting to " ++ (show n))
  let v = sum [1..n]
  putStrLn ("sum to " ++ (show n) ++ " = " ++ (show v))

geladen in GHCi:

Prelude> :load mySum.hs 
[1 of 1] Compiling Main             ( mySum.hs, interpreted )
Ok, modules loaded: Main.
*Main> 

We kunnen nu breekpunten instellen met behulp van regelnummers:

*Main> :break 2
Breakpoint 0 activated at mySum.hs:2:3-39

en GHCi stopt bij de relevante regel wanneer we de functie uitvoeren:

*Main> doSum 12
Stopped at mySum.hs:2:3-39
_result :: IO () = _
n :: Integer = 12
[mySum.hs:2:3-39] *Main> 

Het kan verwarrend zijn waar we ons in het programma bevinden, dus we kunnen gebruiken :list om te verduidelijken:

[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]

We kunnen variabelen afdrukken en de uitvoering ook voortzetten:

[mySum.hs:2:3-39] *Main> n
12
:continue 
Counting to 12
sum to 12 = 78
*Main> 

Meerregelige verklaringen

De :{ instructie begint met de modus met meerdere regels en :} beëindigt deze. In de modus met meerdere regels interpreteert GHCi nieuwe regels als puntkomma's, niet als het einde van een instructie.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow