(* twins.sig *) (* twins stream transformer *) signature TWINS = sig (* transform a stream of integers into a stream of integer pairs by adding to the integer pairs stream all successive elements of the integer stream of the form (n, n + 2) e.g., if the first seven elements of the stream of integers are 2, 3, 5, 7, 11, 13, 17 then the first three elements of the stream of integer pairs are (3, 5), (5, 7), (11, 13) even if the integer stream is infinite (Stream.get always returns a next element), it is possible the integer pair stream is partial (Stream.get never terminates) *) val twins : int Stream.stream -> (int * int) Stream.stream end;