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"