サーチ…


備考

GHCIは、GHCにバンドルされているインタラクティブなREPLです。

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設定ファイルに :set prompt "foo> " 設定します

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(OSXのためにはCmd + D)は同じ効果持つ:q

すでにロードされているファイルの再ロード

GHCiにファイルをロードした場合(例:l filename.hs )、GHCi以外のエディタでファイルを変更した場合、変更を利用するには:rまたは:reloadを使用してファイルをリロードする必要があります:rファイル名をもう一度入力する必要はありません。

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明確にする: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