|
|
1.1 ! root 1: (* Copyright 1989 by AT&T Bell Laboratories *) ! 2: signature STREAM = ! 3: sig type 'a stream ! 4: val streamify : (unit -> '1a) -> '1a stream ! 5: val cons : '1a * '1a stream -> '1a stream ! 6: val get : '1a stream -> '1a * '1a stream ! 7: end ! 8: ! 9: abstraction Stream : STREAM = ! 10: struct ! 11: datatype 'a str = EVAL of 'a * 'a str ref | UNEVAL of (unit->'a) ! 12: ! 13: type 'a stream = 'a str ref ! 14: ! 15: fun get(ref(EVAL t)) = t ! 16: | get(s as ref(UNEVAL f)) = ! 17: let val t = (f(), ref(UNEVAL f)) in s := EVAL t; t end ! 18: ! 19: fun streamify f = ref(UNEVAL f) ! 20: fun cons(a,s) = ref(EVAL(a,s)) ! 21: ! 22: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.