Import Debian changes 20180207-1
[hcoop/debian/mlton.git] / lib / mlyacc-lib / stream.sml
CommitLineData
7f918cf1
CE
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;