(* stream.sig *) (* interface of streams *) signature STREAM = sig type 'a stream val from : ('a -> 'a) -> 'a -> 'a stream val destruct : 'a stream -> 'a * 'a stream end;