Поиск…


замечания

GHCI - это интерактивный REPL, который поставляется вместе с GHC.

Запуск GHCi

Введите ghci в командной строке для запуска GHCI.

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

Изменение приглашения по умолчанию GHCi

По умолчанию приглашение GHCI отображает все модули, которые вы загрузили в свой интерактивный сеанс. Если у вас много загруженных модулей, это может затянуться:

Prelude Data.List Control.Monad> -- etc

Команда :set prompt изменяет приглашение для этого интерактивного сеанса.

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

Чтобы изменить приглашение навсегда, добавьте :set prompt "foo> " в файл конфигурации GHCi .

Файл конфигурации GHCi

GHCi использует файл конфигурации в ~/.ghci . Конфигурационный файл состоит из последовательности команд, которые GHCi будет выполнять при запуске.

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

Загрузка файла

Команда :l или :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

Вы можете оставить GHCi просто с помощью :q или :quit

ghci> :q
Leaving GHCi.

ghci> :quit
Leaving GHCi.

Альтернативно, сочетание клавиш CTRL + D ( Cmd + D для OSX) имеет тот же эффект, что и :q .

Перезагрузка уже загруженного файла

Если вы загрузили файл в GHCi (например, с помощью :l filename.hs ), и вы изменили файл в редакторе вне GHCi, вы должны перезагрузить файл с помощью :r или :reload , чтобы использовать изменения, следовательно вам больше не нужно вводить имя файла.

ghci> :r
OK, modules loaded: Main.

ghci> :reload
OK, modules loaded: Main.

Точки останова с GHCi

GHCi поддерживает точки прерывания по требованию из коробки с интерпретированным кодом (код, который был :loaded ).

Со следующей программой:

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

загружен в GHCi:

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

Теперь мы можем установить точки останова, используя номера строк:

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

и GHCi остановится в соответствующей строке, когда мы запустим функцию:

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

Это может сбивать с толку, где мы находимся в программе, поэтому мы можем использовать :list для уточнения:

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

Мы можем печатать переменные и продолжать выполнение:

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

Многострочные операторы

Команда :{ начинает многострочный режим и :} завершает ее. В многострочном режиме GHCi интерпретирует новые строки как точки с запятой, а не как конец инструкции.

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow