いものやま。

雑多な知識の寄せ集め

GHCの使い方を調べてみた。(まとめ)

これまでの各記事は以下から。

なお、他にも、プロファイリングを行ったり、GHCで拡張された機能を使ったり、FFIを使ったりすることも出来るようなんだけど、それらについては省略。

以下では、特によく使いそうな機能についてまとめておく。

GHCiの使い方のまとめ

起動と終了

起動するにはghciコマンドを使う。

終了するには、:quitコマンド(省略形は:q)を使う。(もしくはCtrl+D)

ロードとインポート

モジュールのロードを行うには、:loadコマンド(省略形は:l)を使う。

ファイルを編集したい場合は:editコマンド(省略形は:e)を、そして、モジュールのリロードを行いたい場合には、:reloadコマンド(省略形は:r)を使う。

インポートを行うには、importもしくは:moduleコマンド(省略形は:m)を使う。

ロードされたモジュール一覧を見るには:show modulesコマンドを、インポートされたモジュール一覧を見るには:show importsコマンドを使う。

式の評価と変数への束縛

式を入力すると評価が行われ、その結果が表示される。
また、その結果はitという変数に束縛される。

そして、IOモナド内にいるときと同様に、letを使って変数へ束縛したり、<-でIOモナドの中身を束縛できる。

束縛された変数の一覧は、:show bindingsコマンドで見ることが出来る。

複数行の入力

複数行の入力を行いたい場合、:{で始めて:}で終わるようにする。

デフォルトで複数行入力になるようにするには、:set +mコマンドを使う。
(元の挙動に戻したい場合、:unset +mとする)

型などの宣言

普通のHaskellソースコードと同じようにすればいい。

型や識別子、モジュールの調査

型の情報を見るには、:typeコマンド(省略形は:t)を使う。

識別子の情報を見るには、:infoコマンド(省略形は:i)を使う。

モジュールの情報を見るには、:browseコマンドを使う。

GHCの使い方のまとめ

ビルド

GHCを使ってビルドするには、ghcコマンドを使う。

引数にMainモジュールを含むソースファイルを指定すれば、依存関係を調べて、必要ならコンパイルを行ってくれる。

モジュールの検索パスを追加したい場合、-iオプションを使う。
(オプションのあとに半角スペースを空けずに、追加したいディレクトリを指定する)

最終的に出力されるファイルの名前を指定したい場合、-oオプションを使う。

出力されるオブジェクトファイルやインタフェースファイルの場所を指定したい場合、-outputdirオプションを使う。

ソースファイルごとのオプションの指定

ソースファイルごとにオプションを指定したい場合、module宣言よりも前に、次のようなプラグマを書く。

{-# OPTIONS_GHC ここにオプション #-}

なお、ここに指定できるオプションは、動的オプションだけ。
(ただ、ほとんどのオプションは動的オプションなので、あまり気にする必要はない)

冗長出力に関するオプション

-vオプションを指定すると、冗長出力がされるようになる。

また、-v0-v1-v2-v3-v4オプションで、冗長出力のレベルをコントロールすることが出来る。
-v3-vと同じ動作)

最適化に関するオプション

-Oオプションを指定すると、最適化が行われるようになる。

また、-O0-O1-O2オプションで、最適化をコントロールすることが出来る。
-O1-Oと同じ動作)

警告に関するオプション

-Wオプションを指定すると、標準的な警告に加えて、いくつかの有用な警告が有効になる。
また、-Wallオプションを指定すると、(一部を除いた)ほぼすべての警告が有効になる。

-Werrorオプションを指定すると、警告がエラー扱いになり、ビルドが止まるようになる。

今日はここまで!