factor/basis/promises/promises.factor

22 lines
580 B
Factor
Raw Normal View History

! Copyright (C) 2004, 2006 Chris Double, Matthew Willis.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
2017-01-24 19:06:17 -05:00
USING: accessors effects.parser fry generalizations kernel
sequences words ;
2007-09-20 18:09:08 -04:00
IN: promises
2013-03-24 18:33:19 -04:00
TUPLE: promise quot forced? value ;
2007-09-20 18:09:08 -04:00
2013-03-24 18:33:19 -04:00
: <promise> ( quot -- promise ) f f promise boa ;
2007-09-20 18:09:08 -04:00
: force ( promise -- value )
2008-08-29 02:53:34 -04:00
dup forced?>> [
dup quot>> call( -- value ) >>value
2008-08-29 02:53:34 -04:00
t >>forced?
2017-01-24 19:06:17 -05:00
] unless value>> ;
2007-09-20 18:09:08 -04:00
: make-lazy-quot ( quot effect -- quot )
2013-03-24 18:33:19 -04:00
in>> length '[ _ _ ncurry <promise> ] ;
2007-09-20 18:09:08 -04:00
SYNTAX: LAZY:
2017-01-24 19:06:17 -05:00
(:) [ make-lazy-quot ] keep define-declared ;