もしRubyistがHaskellを学んだら(15) GHCiの使い方
タグ: learning_haskell / 初版公開: 2014-01-09

今日は少し嗜好を変えて、Haskellを勉強する時に便利な、GHCiの使い方について少し整理してみることにする。

GHCiはRubyでいうとirbに相当するGHCのインタラクティブなインタフェースである。随時プログラムを入力しながら、その挙動を確認することができる。

まずGHCiの起動はghciコマンドで行う。基本的なパッケージがロードされ、プロンプトがPrelude>に代わる。

$ ghci
GHCi, version 7.4.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.
Prelude>

ここにHaskellのプログラムを入力すると、評価結果が出力される。例えばリスト内包表記で、1から10のリストを作ると、確かに評価結果が[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]だということがわかる。

Prelude> [x | x <- [1..10]]
[1,2,3,4,5,6,7,8,9,10]

GHCiへの指示は:から始まるコマンドを利用する。全コマンドの一覧は:?で参照することができる。

Prelude> :?
 Commands available from the prompt:

   <statement>                 evaluate/run <statement>
   :                           repeat last command
   :{\n ..lines.. \n:}\n       multiline command
...

代表的なコマンドの使い方を確認してみよう。

GHCiでは外部のHaskellプログラムをロードして、使うことができる。外部のプログラムをロードするには:loadを使う。これは:lとして省略することができる。myfunc.hsには関数myfuncが定義されているものとして、これをロードして呼び出してみよう。

myfunc = "My Function"
Prelude> :l myfunc.hs
[1 of 1] Compiling Main             ( myfunc.hs, interpreted )
Ok, modules loaded: Main.
*Main> myfunc
"My Function"

外部ファイルを使わずにGHCiでインタラクティブに関数を定義することもできる。その際はletを使って以下のようにする。

*Main> let hoge = "hoge"
*Main> hoge
"hoge"

モジュールをリロードして環境を初期状態に戻すには:reloadまたは:rを使う。これでMainで定義した関数hogeは無かったことになり、ロードしたmyfuncだけが残る。

*Main> :r
Ok, modules loaded: Main.
*Main> hoge

<interactive>:7:1: Not in scope: `hoge'
*Main> myfunc
"My Function"

GHCiで便利な機能に、式の型を確認する:typeがある。これは:tと省略して呼び出すこともできる。試しにmyfuncや、Haskellの組み込み関数であるheadの型を確認してみよう。

*Main> :t myfunc
myfunc :: [Char]
*Main> :t head
head :: [a] -> a

最後に、GHCiを終了するには:quitもしくは:qを使う。恥ずかしい話だが、はじめてGHCiを起動した時はこれがわからず、killしてしまった。ちゃんと終了させよう。

Prelude> :q
Leaving GHCi.
$

これでHaskellの勉強がさらに捗るはずである。

ところで、これまで参考書として”プログラミングHaskell”を使っていたが、”すごいHaskellたのしく学ぼう!”という本がわかりやすいという情報を得たので買ってみた。

まだ1, 2割しか読んでいないが、堅苦しさのない親しみやすい内容でありながら、Haskellを勉強するポイントがしっかり抑えられており、かなり良い入門書と言える。はじめてHaskellを勉強する人はこれを買えば良いと思う。

すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社
売り上げランキング: 126,678