Haskell Language
Korzystanie z GHCi
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