]> gitweb.factorcode.org Git - factor.git/blob - basis/promises/promises.factor
cd9882720685a6ef6daa4ecfd798560845a71863
[factor.git] / basis / promises / promises.factor
1 ! Copyright (C) 2004, 2006 Chris Double, Matthew Willis.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays effects fry generalizations kernel math
4 namespaces parser sequences words ;
5 IN: promises
6
7 TUPLE: promise quot forced? value ;
8
9 : promise ( quot -- promise ) f f \ promise boa ;
10
11 : force ( promise -- value )
12     dup forced?>> [
13         dup quot>> call( -- value ) >>value
14         t >>forced?
15     ] unless
16     value>> ;
17
18 : make-lazy-quot ( quot effect -- quot )
19     in>> length '[ _ _ ncurry promise ] ;
20
21 SYNTAX: LAZY:
22     (:) [ make-lazy-quot ] [ 2nip ] 3bi define-declared ;