Haskell を勉強中

最近 Haskell を勉強しています。

関数型言語を習得すると、プログラマとして 1 ランク上のステージに立てる、かも知れないといろいろな文献を読み人々の会話を聞き、SchemeHaskell で悩んで、Haskell を選びました。

C 言語から派生した言語は、すぐにマスターできるんだけど、Haskell はすごく難しい。僕にとって Haskell は学習曲線が時間に比例せず、多くの人が挫折してしまう(という噂だ)理由がよくわかります。

現時点で難しいと思った点を挙げてみます。

  • 変数に代入がない
  • IO がやたら面倒
  • やりたいことを調べられない

変数に代入ができないのは、参照透明性を確保するため、というのはよくわかるんですが、僕の脳内は変数に代入ができることを前提で処理が思い浮かぶので、慣れないうち(まさに今なんですが)がとても大変。よくこんな言語でステートマシンが表現できるもんだなぁ、と感心しますね。

IO がやたら面倒なのも参照透明性の犠牲です。勉強し始めて 2 週間は経ちますが、未だにファイルの読み書きの仕方がわからない。調べ方もわからない。

やりたいことを調べられない、というのは、それが関数だから。例えばリストの長さを求めたい場合、Haskell では

length list

と書くんですけど、オブジェクト指向脳の僕は

list.length

と書きたい訳です。

オブジェクトにメソッドがぶら下がっていれば、なんとなくこんな処理がありそうだな、というのが想像できるんですが、Haskell は関数が中空にさまよっているので(ま、それは C 言語も同じなんですが)、どんな関数が用意されているのかをあらかじめ知っておく必要があるんだけど、そのどんな関数があるのか、というのが調べられないんです。でも、これは時間が解決するかな。

このように、僕にとって習得のハードルが高い言語だけど、Haskell を使えるようになると、脳内革命が起こると信じて、勉強に精を出しています。

Scheme も非常に興味深いけど、Haskell をマスターした後かなぁ。