use "loops-streams-tests.ml"; open Streams; fun streamTests() = let (* * A streamified list. *) val ls = newStream(1,[1,2,3],hd,tl,null); (* * A streamified string. *) val ss = newStream("x","xyz",fn(x)=>substring(x,0,1), fn(x)=>substring(x,1,size(x)-1),fn(x)=>size(x)=0); (* * A more efficient streamified string. *) val ess = sstream("xyz"); (* * The infinite stream of non-negative ints. *) val is = newStream(0,0,fn(x)=>x,fn(x)=>x+1,fn(x)=>false); (* * The input stream for the file test.dat. *) val indat = fstream("test.dat") fun printn(x) = (print(x); print("\n")) fun printbn(x) = (print(x); print("\n")) in printn(shd(ls)); printn(shd(stl(ls))); printn(shd(stl(ls))); (* Demo ref trans'y *) printn(snth(ls, 2)); printbn(snull(stl(stl(stl(ls)))):bool); printn(shd(snil):int) handle Shd => print("Shd raised.\n"); printn(shd(stl(stl(stl(stl(ls)))))) handle Stl => print("Stl raised.\n"); printn(snth(ls, 3)) handle Snth => print("Snth raised.\n"); sforeach(ess, "", fn(x,s)=> (print(x);x)); print("\n"); print("\n" ^ sforeach(ess, "", fn(x,s)=>(print(x);x)) ^ "\n"); sforeach(lstream(sforeachl(ess, "", fn(x,s)=>x^"!")), nil, fn(x,s)=> (print(x^"\n");nil)) end