目次
GHCi[1]はGHCの対話環境であり、Haskellの式を対話的に評価したりプログラムを解釈実行したりできる。もしあなたがHugsに慣れ親しんでいるなら、GHCiの扱いにもすぐに慣れるだろう。しかしながら、GHCiはコンパイル済みコードをロードすることができ、また、GHCが提供する言語拡張の全て[2]をサポートする。また、GHCiには対話的デバッガが含まれている。(2.5. GHCiデバッガを見よ)
GHCiセッションの例を見ていくことから始めよう。GHCiはghci
コマンドで起動することができる。
$ ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Loading package ffi-1.0 ... linking ... done. Prelude>
GHCiがプレリュードと標準ライブラリをロードするのに少し時間が掛かるかもしれない。その後、プロンプトが表示される。バナーにある通り、:?
と打ち込めば利用可能なコマンド一覧と、それぞれの短い説明が得られる。
これらのコマンドの大部分はこれから説明する。Hugsの利用者へ: 多くのことがHugsと同じように動作するので、すぐに使えるようになるはずである。
プロンプトでは、Haskellの式を入力することができる。
Prelude> 1+2 3 Prelude> let x = 42 in x / 9 4.666666666666667 Prelude>
GHCiは行全体を一つの式だと解釈し、それを評価する。式は複数の行に渡っていてはいけない。エンターキーが押されると、GHCiは即座にそれを評価しようとする。
GHCiには複数行モードもあり、これは空行で終了する。次のように。
Prelude> :set +m Prelude> let x = 42 in x / 9 Prelude| 4.666666666666667 Prelude>
Haskellでは、let
式にはin
が続く。しかし、GHCiでは、式はIO
モナドの中でも解釈され得るので、付属するin
文のないlet
束縛は、上の例のように空行を使うことで示すことができる。
複数行モードは、モナドなdo
文を複数入力するのに便利である。
Control.Monad.State> flip evalStateT 0 $ do Control.Monad.State| i <- get Control.Monad.State| lift $ do Control.Monad.State| putStrLn "Hello World!" Control.Monad.State| print i Control.Monad.State| "Hello World!" 0 Control.Monad.State>
ユーザは、複数行の対話の途中で中断してトップレベルプロンプトに戻ることができる。
Prelude> do Prelude| putStrLn "Hello, World!" Prelude| ^C Prelude>