--- /dev/null
+! Copyright (C) 2004 Chris Double.
+! See http://factorcode.org/license.txt for BSD license.
+!
+USING: kernel sequences words inference namespaces math parser ;
+IN: lazy-lists
+
+: stack-effect-in ( quot word -- n )
+ stack-effect dup [
+ nip effect-in length
+ ] [
+ drop infer first
+ ] if ;
+
+: make-lazy-quot ( word quot -- quot )
+ [
+ dup , swap stack-effect-in [ \ curry , ] times \ <promise> ,
+ ] [ ] make ;
+
+: LAZY: ( -- object object object )
+ CREATE dup reset-generic [ dupd make-lazy-quot define-compound ] f ; parsing
--- /dev/null
+! Copyright (C) 2006 Chris Double.
+! See http://factorcode.org/license.txt for BSD license.
+
+USING: help lazy-lists ;
+
+HELP: LAZY:
+{ $syntax "LAZY: word definition... ;" }
+{ $values { "word" "a new word to define" } { "definition" "a word definition" } }
+{ $description "Creates a lazy word in the current vocabulary. When executed the word will return a " { $link <promise> } " that when forced, executes the word definition. Any values on the stack that are required by the word definition are captured along with the promise." }
+{ $examples
+ { $example "LAZY: my-add ( a b -- c ) + ;\n1 2 my-add force ." }
+}
+{ $see-also force promise-with promise-with2 } ;