Szukaj…


Uwagi

GHCI to interaktywna REPL dostarczana w pakiecie z GHC.

Począwszy od GHCi

Wpisz ghci w wierszu poleceń powłoki, aby uruchomić GHCI.

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

Zmiana domyślnego monitu GHCi

Domyślnie monit GHCI pokazuje wszystkie moduły załadowane do sesji interaktywnej. Jeśli masz załadowanych wiele modułów, może to wydłużyć:

Prelude Data.List Control.Monad> -- etc

Polecenie :set prompt zmienia monit dla tej interaktywnej sesji.

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

Aby trwale zmienić monit, dodaj :set prompt "foo> " do pliku konfiguracyjnego GHCi .

Plik konfiguracyjny GHCi

GHCi używa pliku konfiguracyjnego w ~/.ghci . Plik konfiguracyjny składa się z sekwencji poleceń, które GHCi wykona podczas uruchamiania.

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

Ładowanie pliku

Komenda :l lub :load sprawdza typ i ładuje plik.

$ 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

Rezygnacja z GHCi

Możesz wyjść z GHCi po prostu za pomocą :q lub :quit

ghci> :q
Leaving GHCi.

ghci> :quit
Leaving GHCi.

Alternatywnie skrót CTRL + D ( Cmd + D dla OSX) ma taki sam efekt jak :q .

Ponowne ładowanie już załadowanego pliku

Jeśli załadowałeś plik do GHCi (np. Używając :l filename.hs ) i zmieniłeś plik w edytorze poza GHCi, musisz ponownie załadować plik za pomocą :r lub :reload , aby skorzystać ze zmian, dlatego nie musisz ponownie wpisywać nazwy pliku.

ghci> :r
OK, modules loaded: Main.

ghci> :reload
OK, modules loaded: Main.

Punkty przerwania z GHCi

GHCi obsługuje gotowe punkty przerwania w stylu imperatywnym z interpretowanym kodem (kod, który został :loaded ).

Z następującym programem:

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

załadowane do GHCi:

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

Możemy teraz ustawić punkty przerwania za pomocą numerów linii:

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

a GHCi zatrzyma się na odpowiedniej linii, gdy uruchomimy funkcję:

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

Może być mylące, gdzie jesteśmy w programie, więc możemy użyć :list do wyjaśnienia:

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

Możemy wydrukować zmienne i kontynuować także wykonywanie:

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

Instrukcje wieloliniowe

Instrukcja :{ rozpoczyna tryb wieloliniowy i :} kończy go. W trybie wieloliniowym GHCi będzie interpretował znaki nowej linii jako średniki, a nie jako koniec instrukcji.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow