sig
  type 'a t = unit -> 'Seq.node
  and 'a node = Nil | Cons of 'a * 'Seq.t
  val is_empty : 'Seq.t -> bool
  val uncons : 'Seq.t -> ('a * 'Seq.t) option
  val length : 'Seq.t -> int
  val iter : ('-> unit) -> 'Seq.t -> unit
  val fold_left : ('-> '-> 'a) -> '-> 'Seq.t -> 'a
  val iteri : (int -> '-> unit) -> 'Seq.t -> unit
  val fold_lefti : ('-> int -> '-> 'b) -> '-> 'Seq.t -> 'b
  val for_all : ('-> bool) -> 'Seq.t -> bool
  val exists : ('-> bool) -> 'Seq.t -> bool
  val find : ('-> bool) -> 'Seq.t -> 'a option
  val find_map : ('-> 'b option) -> 'Seq.t -> 'b option
  val iter2 : ('-> '-> unit) -> 'Seq.t -> 'Seq.t -> unit
  val fold_left2 : ('-> '-> '-> 'a) -> '-> 'Seq.t -> 'Seq.t -> 'a
  val for_all2 : ('-> '-> bool) -> 'Seq.t -> 'Seq.t -> bool
  val exists2 : ('-> '-> bool) -> 'Seq.t -> 'Seq.t -> bool
  val equal : ('-> '-> bool) -> 'Seq.t -> 'Seq.t -> bool
  val compare : ('-> '-> int) -> 'Seq.t -> 'Seq.t -> int
  val empty : 'Seq.t
  val return : '-> 'Seq.t
  val cons : '-> 'Seq.t -> 'Seq.t
  val init : int -> (int -> 'a) -> 'Seq.t
  val unfold : ('-> ('a * 'b) option) -> '-> 'Seq.t
  val repeat : '-> 'Seq.t
  val forever : (unit -> 'a) -> 'Seq.t
  val cycle : 'Seq.t -> 'Seq.t
  val iterate : ('-> 'a) -> '-> 'Seq.t
  val map : ('-> 'b) -> 'Seq.t -> 'Seq.t
  val mapi : (int -> '-> 'b) -> 'Seq.t -> 'Seq.t
  val filter : ('-> bool) -> 'Seq.t -> 'Seq.t
  val filter_map : ('-> 'b option) -> 'Seq.t -> 'Seq.t
  val scan : ('-> '-> 'b) -> '-> 'Seq.t -> 'Seq.t
  val take : int -> 'Seq.t -> 'Seq.t
  val drop : int -> 'Seq.t -> 'Seq.t
  val take_while : ('-> bool) -> 'Seq.t -> 'Seq.t
  val drop_while : ('-> bool) -> 'Seq.t -> 'Seq.t
  val group : ('-> '-> bool) -> 'Seq.t -> 'Seq.t Seq.t
  val memoize : 'Seq.t -> 'Seq.t
  exception Forced_twice
  val once : 'Seq.t -> 'Seq.t
  val transpose : 'Seq.t Seq.t -> 'Seq.t Seq.t
  val append : 'Seq.t -> 'Seq.t -> 'Seq.t
  val concat : 'Seq.t Seq.t -> 'Seq.t
  val flat_map : ('-> 'Seq.t) -> 'Seq.t -> 'Seq.t
  val concat_map : ('-> 'Seq.t) -> 'Seq.t -> 'Seq.t
  val zip : 'Seq.t -> 'Seq.t -> ('a * 'b) Seq.t
  val map2 : ('-> '-> 'c) -> 'Seq.t -> 'Seq.t -> 'Seq.t
  val interleave : 'Seq.t -> 'Seq.t -> 'Seq.t
  val sorted_merge : ('-> '-> int) -> 'Seq.t -> 'Seq.t -> 'Seq.t
  val product : 'Seq.t -> 'Seq.t -> ('a * 'b) Seq.t
  val map_product : ('-> '-> 'c) -> 'Seq.t -> 'Seq.t -> 'Seq.t
  val unzip : ('a * 'b) Seq.t -> 'Seq.t * 'Seq.t
  val split : ('a * 'b) Seq.t -> 'Seq.t * 'Seq.t
  val partition_map :
    ('-> ('b, 'c) Stdlib.Either.t) -> 'Seq.t -> 'Seq.t * 'Seq.t
  val partition : ('-> bool) -> 'Seq.t -> 'Seq.t * 'Seq.t
  val of_dispenser : (unit -> 'a option) -> 'Seq.t
  val to_dispenser : 'Seq.t -> unit -> 'a option
  val ints : int -> int Seq.t
end