The Haskell School of Expression をようやく読み終えました。
The Haskell School of Expression: Learning Functional Programming through Multimedia
- 作者: Professor Paul Hudak
- 出版社/メーカー: Cambridge University Press
- 発売日: 2000/06
- メディア: ペーパーバック
- 購入: 2人 クリック: 27回
- この商品を含むブログ (16件) を見る
この本では、グラフィックの 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 の仕様書は例がほどんど書かれていないため理解困難です。この本は、仕様を詳しく解説しており、しかも分かり易いです。