sig
  type +'a stream
  val fork : ('a -> 'b) * ('a -> 'c) -> 'a -> 'b * 'c
  val take : int -> 'a Streams.stream -> 'a list
  val unfold : ('a -> 'b * 'a) -> 'a -> 'b Streams.stream
  val univ : ('a -> 'b) * ('a -> 'a) -> 'a -> 'b Streams.stream
  val hd : 'a Streams.stream -> 'a
  val tl : 'a Streams.stream -> 'a Streams.stream
  val repeat : 'a -> 'a Streams.stream
  val map : ('a -> 'b) -> 'a Streams.stream -> 'b Streams.stream
  val diag : 'a Streams.stream Streams.stream -> 'a Streams.stream
  val suffixes : 'a Streams.stream -> 'a Streams.stream Streams.stream
  val interleave :
    'a Streams.stream -> 'a Streams.stream -> 'a Streams.stream
  val fibs : int Streams.stream
  val pi : float Streams.stream
  val look_and_say : int list Streams.stream
end