Ricerca…


Osservazioni

GHCI è il REPL interattivo fornito in dotazione con GHC.

Avvio di GHCi

Digitare ghci al prompt della shell per avviare GHCI.

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

Modifica del prompt predefinito GHCi

Per impostazione predefinita, la richiesta di GHCI mostra tutti i moduli caricati nella sessione interattiva. Se hai molti moduli caricati, questo può richiedere molto tempo:

Prelude Data.List Control.Monad> -- etc

Il comando :set prompt cambia il prompt per questa sessione interattiva.

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

Per modificare permanentemente il prompt, aggiungere :set prompt "foo> " nel file di configurazione GHCi .

Il file di configurazione GHCi

GHCi utilizza un file di configurazione in ~/.ghci . Un file di configurazione è costituito da una sequenza di comandi che GHCi eseguirà all'avvio.

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

Caricamento di un file

Il comando :l o :load type-controlla e carica un file.

$ 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

Uscita da GHCi

Puoi uscire da GHCi semplicemente con :q oppure :quit

ghci> :q
Leaving GHCi.

ghci> :quit
Leaving GHCi.

In alternativa, la scorciatoia CTRL + D ( Cmd + D per OSX) ha lo stesso effetto di :q .

Ricaricamento di un file già caricato

Se hai caricato un file in GHCi (ad esempio usando :l filename.hs ) e hai modificato il file in un editor esterno a GHCi, devi ricaricare il file con :r o :reload per utilizzare le modifiche, quindi non è necessario digitare nuovamente il nome del file.

ghci> :r
OK, modules loaded: Main.

ghci> :reload
OK, modules loaded: Main.

Punti di interruzione con GHCi

GHCi supporta i breakpoint in stile imperativo fuori dalla scatola con codice interpretato (codice che è stato :loaded ).

Con il seguente programma:

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

caricato in GHCi:

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

Ora possiamo impostare i punti di interruzione usando i numeri di riga:

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

e GHCi si fermerà sulla riga corrispondente quando eseguiremo la funzione:

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

Potrebbe essere fonte di confusione in cui ci troviamo nel programma, quindi possiamo usare :list per chiarire:

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

Possiamo stampare variabili e continuare anche l'esecuzione:

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

Dichiarazioni multilinea

L'istruzione :{ inizia la multi-linea e :} chiude. In modalità multi-linea GHCi interpreterà le nuove come punto e virgola, non come la fine di un'istruzione.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow