OCaml で遅延(怠惰*1)評価を 実装する方法があるが, 毎回 lazy や Lazy.force を書かないといけないため非常に面倒である. たとえば,ML の授業などでは, type 'a lazy_list = Nil | Cons of 'a * 'a lazy_list lazy_t とすれば簡単,と教わるのではないだろうか. このとき,1::2::3::... のようなリストを定義するためには Cons(1, lazy(Cons(2, lazy(Cons(3,lazy ...))))) と記述する必要があり, lazy を毎回書くのが嫌になるかもしれない.だからといってlet cons x xs = Cons(x, lazy xs) などとしてはいけない.OCaml では,ユーザの定義する全ての関数は正格関数となるため, cons が呼ばれた時点で xs が必ず評価されてし