lazy と delay

やっと lazy と delay の違いがわかった。前にごちゃごちゃやって、はまっていたのが嘘みたいにあっさり。。
多分、前は info に書かれてるような Haskell っぽい引数の表記に慣れてなかったから分からなかった or 何か勘違いしてたのだろう。

delay (1)

(force (delay (delay "A")))

=> #

lazy (1)

(force (lazy (delay "A")))

=> "A"

delay (2)

delay 版で値を得るときはこうしないといけない

(force (force (delay (delay "A")))) 

=> "A"

lazy (2)

lazy でも delay による promise が多段になってると 1 回 force しただけでは値を得られない。

(force (lazy (delay (delay "A"))))

=> #

lazy (3)

lazy の多段なら一回で値を得られる。

(force (lazy (lazy (delay "A"))))

=> "A"