1signature Streams = 2sig 3 datatype 'a stream = Stream of 'a * (unit -> 'a stream) 4 exception end_of_stream 5 val empty_stream : unit -> 'a stream 6 val stream_map : ('a -> 'b) -> (unit -> 'a stream) -> (unit -> 'b stream) 7 val stream_append : (unit -> 'a stream) -> 8 (unit -> 'a stream) -> 9 (unit -> 'a stream) 10 val stream_append_list : (unit -> 'a stream) list -> (unit -> 'a stream) 11 val stream_flat : (unit -> (unit -> 'a stream) stream) -> unit -> 'a stream 12 val permutations : 'a list -> unit -> 'a list stream 13end 14