| author | wenzelm |
| Wed, 27 Feb 2019 14:22:00 +0100 | |
| changeset 69843 | edda2d14c108 |
| parent 46845 | 6431a93ffeb6 |
| permissions | -rw-r--r-- |
(* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi *) (* Stream: a structure implementing a lazy stream. The signature STREAM is found in base.sig *) structure Stream :> STREAM = struct datatype 'a str = EVAL of 'a * 'a str ref | UNEVAL of (unit->'a) type 'a stream = 'a str ref fun get(ref(EVAL t)) = t | get(s as ref(UNEVAL f)) = let val t = (f(), ref(UNEVAL f)) in s := EVAL t; t end fun streamify f = ref(UNEVAL f) fun cons(a,s) = ref(EVAL(a,s)) end;