第2章 GHCiを使う

目次

2.1. GHCiの紹介
2.2. ソースファイルをロードする
2.2.1. モジュールとファイル名
2.2.2. ソースコードの変更と再コンパイル
2.3. コンパイル済みコードをロードする
2.4. プロンプトで対話的に評価する
2.4.1. I/O動作とプロンプト
2.4.2. プロンプトでdo記法を使う
2.4.3. 複数行入力
2.4.4. 型、クラスおよびその他の宣言
2.4.5. プロンプトで実際にスコープにあるのは何か
2.4.5.1. :module:load
2.4.5.2. 修飾名
2.4.5.3. :mainコマンドと:runコマンド
2.4.6. itという変数
2.4.7. GHCiにおける型のデフォルト化
2.5. GHCiデバッガ
2.5.1. ブレークポイントと変数内容の表示
2.5.1.1. ブレークポイントを設定する
2.5.1.2. ブレークポイントを一覧・削除する
2.5.2. ステップ実行
2.5.3. ブレークポイントのネスト
2.5.4. _resultという変数
2.5.5. 追跡と履歴
2.5.6. 例外をデバッグする
2.5.7. 例: 関数を調べる
2.5.8. 制約
2.6. GHCiを起動する
2.6.1. パッケージ
2.6.2. 追加のライブラリ
2.7. GHCiのコマンド群
2.8. :setコマンド
2.8.1. GHCiオプション
2.8.2. GHCiからGHCのコマンド行オプションを設定する
2.9. .ghciファイル
2.10. GHCi内でオブジェクトコードにコンパイルする
2.11. FAQと注意事項

GHCi[1]はGHCの対話環境であり、Haskellの式を対話的に評価したりプログラムを解釈実行したりできる。もしあなたがHugsに慣れ親しんでいるなら、GHCiの扱いにもすぐに慣れるだろう。しかしながら、GHCiはコンパイル済みコードをロードすることができ、また、GHCが提供する言語拡張の全て[2]をサポートする。また、GHCiには対話的デバッガが含まれている。(2.5. GHCiデバッガを見よ)

2.1. 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がプレリュードと標準ライブラリをロードするのに少し時間が掛かるかもしれない。その後、プロンプトが表示される。バナーにある通り、:?と打ち込めば利用可能なコマンド一覧と、それぞれの短い説明が得られる。これらの大部分はこれから説明する。また、全てのコマンドについての完全な文書が2.7. GHCiのコマンド群にある。

プロンプトでは、Haskellの式を入力することができる。

Prelude> 1+2
3
Prelude> let x = 42 in x / 9
4.666666666666667
Prelude>

GHCiは行全体を一つの式だと解釈し、それを評価する。式は複数の行に渡っていてはいけない。エンターキーが押されると、GHCiは即座にそれを評価しようとする。

Haskellでは、let式にはinが続く。しかし、GHCiでは、式はIOモナドの中でも解釈され得るので、付属するin文のないlet束縛は、上の例のように空行を使うことで示すことができる。

[1]

「i」はinteractiveのiである

[2]

ただし、現在のところ、foreign exportを除く