--- /dev/null
+! Copyright (C) 2006 Chris Double.
+! See http://factorcode.org/license.txt for BSD license.
+
+USING: kernel lazy-lists io ;
+IN: lazy-lists
+
+TUPLE: lazy-contents stream car cdr ;
+
+: lcontents ( stream -- result )
+ f f <lazy-contents> ;
+
+M: lazy-contents car ( lazy-contents -- car )
+ dup lazy-contents-car dup [
+ nip
+ ] [
+ drop dup lazy-contents-stream stream-read1
+ swap dupd set-lazy-contents-car
+ ] if ;
+
+M: lazy-contents cdr ( lazy-contents -- cdr )
+ dup lazy-contents-cdr dup [
+ nip
+ ] [
+ drop dup
+ [ lazy-contents-stream ] keep
+ car [
+ lcontents [ swap set-lazy-contents-cdr ] keep
+ ] [
+ 2drop nil
+ ] if
+ ] if ;
+
+M: lazy-contents nil? ( lazy-contents -- bool )
+ car not ;
\ No newline at end of file
--- /dev/null
+! Copyright (C) 2006 Chris Double.
+! See http://factorcode.org/license.txt for BSD license.
+
+USING: help lazy-lists sequences ;
+
+HELP: lcontents
+{ $values { "stream" "a stream" } }
+{ $description "Returns a lazy list of all characters in the file. " { $link car } " returns the next character in the file, " { $link cdr } " returns the remaining characters as a lazy list. " { $link nil? } " indicates end of file." }
+{ $see-also leach lmap ltake lsubset lfrom lfrom-by } ;
+