1(* ML-Yacc Parser Generator (c) 1989 Andrew W. Appel, David R. Tarditi *) 2 3(* Stream: a structure implementing a lazy stream. The signature STREAM 4 is found in base.sig *) 5 6structure Stream :> STREAM = 7struct 8 datatype 'a str = EVAL of 'a * 'a str ref | UNEVAL of (unit->'a) 9 10 type 'a stream = 'a str ref 11 12 fun get(ref(EVAL t)) = t 13 | get(s as ref(UNEVAL f)) = 14 let val t = (f(), ref(UNEVAL f)) in s := EVAL t; t end 15 16 fun streamify f = ref(UNEVAL f) 17 fun cons(a,s) = ref(EVAL(a,s)) 18 19end; 20