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:50 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
lazy, в который передается наш фан, будет реализовывать однократность, всё в порядке.

А второй компонент call by need - sharing - сам окамл делает безо всяких усилий с нашей стороны.

Date: 2013-08-13 05:09 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Вот и я сперва подумал, что тут ключевое слово, и решил, что опечатка.

Date: 2013-08-13 05:22 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
А причем тут ключевое слово?

Date: 2013-08-13 05:27 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Там lazy - его собственная ф-я, не окамловская родная.

Date: 2013-08-13 05:29 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
Ну так его функция прекрасно сможет заимплементить санк, получив () -> a на вход.

Date: 2013-08-13 06:04 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Ага. Просто сперва не было ясно, что там именно своя реализация. Ибо не со своей и fun _ -> не надо.

Date: 2013-08-13 06:05 pm (UTC)
From: [identity profile] migmit.livejournal.com
[livejournal.com profile] thedeemon увидел слово lazy и, так как оно совпадает с имеющимся ключевым словом, решил, что я написал его там по ошибке.