migmit: (Default)
[personal profile] migmit
utop[0]> open Core.Std;;
utop[1]> let a = lazy (printf "A\n"; 0);;
val a : int lazy_t = <lazy>
utop[2]> let b (a : int) = lazy (printf "B\n"; 0);;
val b : int -> int lazy_t = <fun>
utop[3]> Lazy.force Lazy.(a >>= b);;
A
B
- : int = 0

Ну ё-моё...

Date: 2013-08-13 04:12 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, получается так.
Мне в окамле слово lazy за 5 лет лишь один раз пригодилось. Там, где в хаскеле используют ленивые списки, в окамле обычно хватает Enum'ов. В остальном просто стиль работы другой, энергичный. Потому особой нужды в ленивости и не чувствуется. Пытаться из окамла изобразить хаскель, делая все ленивым, - плохая затея.
Edited Date: 2013-08-13 04:12 pm (UTC)

Date: 2013-08-13 05:02 pm (UTC)
From: [identity profile] migmit.livejournal.com
Понятно, что плохая. Просто я думал, что лишний кейворд введён не просто так.

Date: 2013-08-13 05:28 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
Под ленивостью call by need понимают очень редко. Такого добра, как, например, https://github.com/pkrumins/node-lazy (прекривейшей эмуляции стримов на эвент-эмиттерах) полно.

В этом плане в Википедии засилие учоных - см. http://nponeccop.livejournal.com/333219.html?thread=3079331#t3079331