これまでの回で,何度か遅延評価の持つ性質について語ってきました。皆さんの頭の中には,すでに遅延評価に対して「なんとなくこういうものだ」という漠然としたイメージができていると思います。 多くの場合にはそうした漠然としたイメージだけでも十分なのですが,それでは困る場合もあります。例えば,プログラム全体の最適化(optimization)のために関数やデータ構造の効率化(efficiency improvement)を図ろうとする場合,遅延評価に対する理解がなければ完全に手探りで行うしかありません。 残念ながら,前回のIOモナドと同様に,遅延評価を実現するための仕組みもまた,Haskell標準ではほとんど触れられていません。実装のための余地を残しておくためです。ただ,IOモナドの場合と同様に,「このようなモデルで,このような性質を持つ」という仕様外でのだいたいの合意は存在します。 そこで今回は,