2007年8月9日木曜日

Haskell を学ぶための環境を整える

1. 最近気になる「関数型言語」

新しい言語を勉強しようと思う。最近の流行を調べたら、

関数型言語

がホットなようだ。以前から ListScheme には興味があった。しかし、敷居が高くて手をつけることができなかった。

Haskell

最近、Haskell の入門書が出版された。この本を手始めにして、Haskell を学ぶことにした。

 

Erlang

Haskell 以外に、関数型言語として注目されているのは Erlang 。

twitterブームの陰で注目を集める"Erlang" - @IT によると、

twitterでは、メッセージングシステムに"ejabberd"を使っているという。これは"Erlang"で書かれたIMサーバだ。

Erlangは並列処理に適したプログラミング言語で、1987年に登場し、1998年にはオープンソース化されているので新しく登場した言語というわけではないが、時流に乗る形で、現在にわかに注目を集め始めている。Rubyの開発者として知られる、まつもとゆきひろ氏も、4月18日の" 「次」の言語"と題したブログのエントリで「次にくるトレンドは『関数型』と『並列』。両方を押さえたErlangが本命。歴史も信頼性もあり、知名度上昇中」と、次にメジャーになりうる言語の本命にErlangの名前を挙げている。

このような評価を目にしたことも、関数型言語をはじめようとしたキッカケとなった。

 

OCaml

Haskell と並んで気になるのは、

Objective Caml

できれば OCaml プログラミング入門 も読んでみたい。

 

最初に読みたい論文

関数型言語を学ぶなら、

は押えておきたい。

 

2. コンパイラのインストール

以下のいずれかをインストール。

 

3. Emacs の設定

Haskell を書くためのエディタとして Emacs を利用する。Windows 上では Meadow を使った。

を参考に

haskell-mode

の設定をした。load-path を自分の環境に合わせて変更した。

haskell-mode

Haskell Mode for Emacs によると、haskell-modeEmacs Lisp packages から最新のものを取得できるとのこと。インストールの方法については、以下を参照。

haskell-mode からダウンロードしたファイルを解凍して、フォルダ名を haskell-mode に変更。 C:\meadow\site-lisp に配置した。

~/.emacs には、以下を追加。

(load "/meadow/site-lisp/haskell-mode-2.4/haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)

追記 (2009.12.27)Dropbox に Emacs のライブラリを置いたのに伴い、haskell-mode も Dropbox に置くことに。上記の load … の一文を次のように書き換えた。

(load "~/My Documents/My Dropbox/elisp/haskell-mode/haskell-site-file.el")

haskell-mode 使える関数を予め describe-mode で確認しておくと良い。

 

4. Emacs でプログラムの実行

コンパイルする場合

プログラムをコンパイルするには、今マンドラ以上で、

ghc プログラム名 -o プログラム名

(プログラムの拡張子は、.hs を用いる。)

Emacs では、M-! または M-| を入力した後、Shell command から行う。

プログラムを実行するには、Shell command から、

プログラム名

を入力する。

 

ghci を利用する場合

プログラムの実行結果をすぐに見たいときは、コンパイルしない。

Shell command から

runghc プログラム名

とすると、実行させることができる。

Emacs を利用している場合、

C-c C-l

により、GHCi が起動する。runghc よりも楽にプログラムを実行できる。

追記 (2009.12.21) : 新しいバージョンをインストールした直後に C-c C-l すると、

… no such file or directory, hugs

というエラーが表示される。この場合、ghci へのパスを設定した後、再ログインし、新しい ghci へのパスをプログラムが認識できるようにする必要がある。