あどけない話

インターネットに関する技術的な話など

The Haskell School of Expression

The Haskell School of Expression をようやく読み終えました。

The Haskell School of Expression: Learning Functional Programming through Multimedia

The Haskell School of Expression: Learning Functional Programming through Multimedia

この本では、グラフィックの DSL を作ることを通じて Haskell を学びます。

よいところ

代数データー型とモジュールの作り方/使い方がよく分かります。

データー構築子の名前付けに困らない

たとえば、あるデーター型を定義して、さらにそれを共用体のように格納する型を書きたいとします。たとえば、こんな感じになるでしょう。

newtype Foo = Foo String
newtype Bar = Bar String
data Union = U_Foo Foo | U_Bar Bar

現実的な問題として、データー構築子の名前をどうするか迷います。この例では、U_F という不格好な名前になっています。この本では、データー構築子と型構築子の名前空間は分かれていることを利用して、以下のように定義します。(87ページ)

newtype Foo = FooX String
newtype Bar = BarX String
data Union = Foo Foo | Bar Bar

僕はこれを知って、代数データー型を定義するのが気楽になりました。

トリッキーな import

あるモジュールを import したいけれど、一部の名前が衝突してしまうといういう場合、どうすればいいでしょうか? この本には、以下のような使い方が示されています。(114ページ)

import SOEGraphics hiding (Region)
import qualified SOEGraphics hiding as G (Region)

SOEGraphics の Region 以外は、プレフィックスなしで使え、SOEGraphics の Region は G.Region として使えます。

この本を読む前からこの方法を知ってはいましたが、ちゃんと解説されているのは初めて見ました。

二項演算子

データー構築子に二項演算子が使えることが書いてあります。びっくりです。詳しくは Haskell のデータ構築子を読んで下さい。

さらによいところ

  • 美しく高速な累乗計算の方法が載っています。(143ページ)
  • foldr の方が適している例はいっぱいありますが、この本には foldl の方が適している例も載っています。(71ページ)
  • Haskell の仕様書は例がほどんど書かれていないため理解困難です。この本は、仕様を詳しく解説しており、しかも分かり易いです。

悪いところ

グラフィックという題材自体が難しく、Haskell と同時に、題材も理解しないといけないのが辛いです。前にある章は、後の章の基礎となっていますが、後でどう役立つのか一言書いてないために、自分がどこを目指しているのか分からなくなります。

また、最後の方で出てくる DSL ですが、これが本当にグラフィックを書き易くしているのかピンときませんでした。

練習問題は、取って付けたような感じで、解くには説明されてない知識が必要となります。大学の授業で使うには辛いでしょう。

まとめ

この本は、Haskell を学びたい人なら誰でもお勧めだとはいえません。しかし、実用的な Haskell プログラミングをしたい人が読めば、たくさんの発見があるでしょう。