「入門Haskell」を読了

表紙の三羽の鳥の何ともいえない微妙さが売りの、向井淳さん(@jmuk)の「入門Haskell―はじめて学ぶ関数型言語」を読み終えた。Haskellというとモナドとか圏論とか数学とか型推論とか金融とか、物騒な単語ばかりがキーワードになってしまってとても敷居が高くなってしまいがちなところを上手く抑えて、平易だけど知的な語り口で「使えるようになりましょう」という目的意識と態度がそれとなく、しかしはっきりと滲み出ていて良書である。なんというか、Haskellを書くときの心構えとか考え方を感じられるのが一番良い点だと思う。最後に「さめがめ」をHaskellで書いてみるという章があるのだが、さめがめという微妙がゲームを選ぶ辺りにもとてつもないセンスを感じる。Amazonを見ると品切れとなっているようだが絶版にするには勿体ない入門書である。

入門Haskell―はじめて学ぶ関数型言語

入門Haskell―はじめて学ぶ関数型言語

以前「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」をざっと読んだのだが、言語仕様とサンプルコードの表面的な説明に終止していて、考え方や思考のトレースはあまりできなくて、Haskellそのものにあまり興味を持てなかった。というか、Haskellを使って嬉しいぜ!!!というポイントがよく見えなかった。一方で、この「入門Haskell」は、Haskellを使って「どうだ!簡単だろエレガントだろ」ということを一貫して主張していて、実際その通りになっている。

そもそも、私がどうしてHaskellに注目しているかというと

  1. Pureなメジャー言語だから
  2. Haskell for Cloudいう論文(PDF)から、いろいろ並列周りというかそういうところに興味を持っている人が沢山いることを知ったから
  3. で、そのCloudHaskellという実装が気になるから

といったところが切っ掛けだけれども、Erlangがターゲットにしている、いわゆるFault-tolerantな実運用の世界は大体動的なんですよ。動的というのはいろいろ意味があるが、Erlangでは型もdynamicだし、non-stop dynamic upgradeというのもある。ところが、こういうヤツは大体Haskellのいいところと激しく矛盾してしまう。型推論とか、純粋なラムダ計算は重要があるとバグが割となくなる=Haskellのメリットなわけで、どうにかしてErlangとか実運用の世界に持ち込みたいなという問題意識がある。
で、そちら方面の定番といわれるHaskellの世界をちょっと覗いてみたくなった。コンパイル時に型推論する限りは、実行中に評価されるコードは全て静的にリンクされてしまうわけで、動いているプロセスに動的にコードを突っ込んで大丈夫なのかとか。遅延評価って何か嬉しいのかとか。よく見たらErlangの世界と全然相容れないわけですよ。困ったなぁ。

分散KVSとか作るときに問題になるのはロックとかメモリ管理とかI/Oとかそういうのになるわけで、ロックとかI/Oなどという副作用そのものをどうやってうまく抽象化して見ないことにして実装するか、メモリ管理はどうやってGCをコントロールするか、とかいろいろ面倒になってしまい、たとえばC++ならメソッドにはなるべくconstをつけたいんだけど、reader lock取ってるだけなせいでconstつけれない。うーん、そういう問題を解決するならSTMかもしれないけどなんかBuzzってるし評判悪いよねぇ、といったところで実際に体験してみないといけないなと実感している...というのが、Haskellに興味を持った動機。

やしかし、この本はとてもよい本なのだが、Haskellは本当に分からん...例えて言うなら高校で初めて確率と組み合わせを習ったときのような感覚。大学で微分積分に再入門したときの感覚。書いてみないと実感できないんだろうけど、なんかよい題材ないかなあ。