sig
  type 'a t = ('-> unit) -> unit
  type ('a, 'b) t2 = ('-> '-> unit) -> unit
  val from_iter : (('-> unit) -> unit) -> 'Sequence.t
  val from_fun : (unit -> 'a option) -> 'Sequence.t
  val empty : 'Sequence.t
  val singleton : '-> 'Sequence.t
  val repeat : '-> 'Sequence.t
  val iterate : ('-> 'a) -> '-> 'Sequence.t
  val forever : (unit -> 'b) -> 'Sequence.t
  val cycle : 'Sequence.t -> 'Sequence.t
  val iter : ('-> unit) -> 'Sequence.t -> unit
  val iteri : (int -> '-> unit) -> 'Sequence.t -> unit
  val fold : ('-> '-> 'b) -> '-> 'Sequence.t -> 'b
  val foldi : ('-> int -> '-> 'b) -> '-> 'Sequence.t -> 'b
  val map : ('-> 'b) -> 'Sequence.t -> 'Sequence.t
  val mapi : (int -> '-> 'b) -> 'Sequence.t -> 'Sequence.t
  val for_all : ('-> bool) -> 'Sequence.t -> bool
  val exists : ('-> bool) -> 'Sequence.t -> bool
  val length : 'Sequence.t -> int
  val is_empty : 'Sequence.t -> bool
  val filter : ('-> bool) -> 'Sequence.t -> 'Sequence.t
  val append : 'Sequence.t -> 'Sequence.t -> 'Sequence.t
  val concat : 'Sequence.t Sequence.t -> 'Sequence.t
  val flatten : 'Sequence.t Sequence.t -> 'Sequence.t
  val flatMap : ('-> 'Sequence.t) -> 'Sequence.t -> 'Sequence.t
  val intersperse : '-> 'Sequence.t -> 'Sequence.t
  val persistent : 'Sequence.t -> 'Sequence.t
  val sort : ?cmp:('-> '-> int) -> 'Sequence.t -> 'Sequence.t
  val sort_uniq : ?cmp:('-> '-> int) -> 'Sequence.t -> 'Sequence.t
  val group : ?eq:('-> '-> bool) -> 'Sequence.t -> 'a list Sequence.t
  val uniq : ?eq:('-> '-> bool) -> 'Sequence.t -> 'Sequence.t
  val product : 'Sequence.t -> 'Sequence.t -> ('a * 'b) Sequence.t
  val join :
    join_row:('-> '-> 'c option) ->
    'Sequence.t -> 'Sequence.t -> 'Sequence.t
  val unfoldr : ('-> ('a * 'b) option) -> '-> 'Sequence.t
  val scan : ('-> '-> 'b) -> '-> 'Sequence.t -> 'Sequence.t
  val max : ?lt:('-> '-> bool) -> 'Sequence.t -> '-> 'a
  val min : ?lt:('-> '-> bool) -> 'Sequence.t -> '-> 'a
  val take : int -> 'Sequence.t -> 'Sequence.t
  val drop : int -> 'Sequence.t -> 'Sequence.t
  val rev : 'Sequence.t -> 'Sequence.t
  val empty2 : ('a, 'b) Sequence.t2
  val is_empty2 : ('a, 'b) Sequence.t2 -> bool
  val length2 : ('a, 'b) Sequence.t2 -> int
  val zip : ('a, 'b) Sequence.t2 -> ('a * 'b) Sequence.t
  val unzip : ('a * 'b) Sequence.t -> ('a, 'b) Sequence.t2
  val zip_i : 'Sequence.t -> (int, 'a) Sequence.t2
  val fold2 : ('-> '-> '-> 'c) -> '-> ('a, 'b) Sequence.t2 -> 'c
  val iter2 : ('-> '-> unit) -> ('a, 'b) Sequence.t2 -> unit
  val map2 : ('-> '-> 'c) -> ('a, 'b) Sequence.t2 -> 'Sequence.t
  val map2_2 :
    ('-> '-> 'c) ->
    ('-> '-> 'd) -> ('a, 'b) Sequence.t2 -> ('c, 'd) Sequence.t2
  val to_list : 'Sequence.t -> 'a list
  val to_rev_list : 'Sequence.t -> 'a list
  val of_list : 'a list -> 'Sequence.t
  val to_array : 'Sequence.t -> 'a array
  val of_array : 'a array -> 'Sequence.t
  val of_array_i : 'a array -> (int * 'a) Sequence.t
  val of_array2 : 'a array -> (int, 'a) Sequence.t2
  val array_slice : 'a array -> int -> int -> 'Sequence.t
  val of_stream : 'Stream.t -> 'Sequence.t
  val to_stream : 'Sequence.t -> 'Stream.t
  val to_stack : 'Stack.t -> 'Sequence.t -> unit
  val of_stack : 'Stack.t -> 'Sequence.t
  val to_queue : 'Queue.t -> 'Sequence.t -> unit
  val of_queue : 'Queue.t -> 'Sequence.t
  val hashtbl_add : ('a, 'b) Hashtbl.t -> ('a * 'b) Sequence.t -> unit
  val hashtbl_replace : ('a, 'b) Hashtbl.t -> ('a * 'b) Sequence.t -> unit
  val to_hashtbl : ('a * 'b) Sequence.t -> ('a, 'b) Hashtbl.t
  val to_hashtbl2 : ('a, 'b) Sequence.t2 -> ('a, 'b) Hashtbl.t
  val of_hashtbl : ('a, 'b) Hashtbl.t -> ('a * 'b) Sequence.t
  val of_hashtbl2 : ('a, 'b) Hashtbl.t -> ('a, 'b) Sequence.t2
  val hashtbl_keys : ('a, 'b) Hashtbl.t -> 'Sequence.t
  val hashtbl_values : ('a, 'b) Hashtbl.t -> 'Sequence.t
  val of_str : string -> char Sequence.t
  val to_str : char Sequence.t -> string
  val of_in_channel : Pervasives.in_channel -> char Sequence.t
  val to_buffer : char Sequence.t -> Buffer.t -> unit
  val int_range : start:int -> stop:int -> int Sequence.t
  val of_set :
    (module Set.S with type elt = 'and type t = 'b) -> '-> 'Sequence.t
  val to_set :
    (module Set.S with type elt = 'and type t = 'b) -> 'Sequence.t -> 'b
  module Set :
    sig
      module type S =
        sig
          type set
          type elt
          val empty : set
          val is_empty : set -> bool
          val mem : elt -> set -> bool
          val add : elt -> set -> set
          val singleton : elt -> set
          val remove : elt -> set -> set
          val union : set -> set -> set
          val inter : set -> set -> set
          val diff : set -> set -> set
          val compare : set -> set -> int
          val equal : set -> set -> bool
          val subset : set -> set -> bool
          val iter : (elt -> unit) -> set -> unit
          val fold : (elt -> '-> 'a) -> set -> '-> 'a
          val for_all : (elt -> bool) -> set -> bool
          val exists : (elt -> bool) -> set -> bool
          val filter : (elt -> bool) -> set -> set
          val partition : (elt -> bool) -> set -> set * set
          val cardinal : set -> int
          val elements : set -> elt list
          val min_elt : set -> elt
          val max_elt : set -> elt
          val choose : set -> elt
          val split : elt -> set -> set * bool * set
          val of_seq : elt Sequence.t -> Sequence.Set.S.set
          val to_seq : Sequence.Set.S.set -> elt Sequence.t
        end
      module Adapt :
        functor (X : Set.S->
          sig
            type set = X.t
            type elt = X.elt
            val empty : set
            val is_empty : set -> bool
            val mem : elt -> set -> bool
            val add : elt -> set -> set
            val singleton : elt -> set
            val remove : elt -> set -> set
            val union : set -> set -> set
            val inter : set -> set -> set
            val diff : set -> set -> set
            val compare : set -> set -> int
            val equal : set -> set -> bool
            val subset : set -> set -> bool
            val iter : (elt -> unit) -> set -> unit
            val fold : (elt -> '-> 'a) -> set -> '-> 'a
            val for_all : (elt -> bool) -> set -> bool
            val exists : (elt -> bool) -> set -> bool
            val filter : (elt -> bool) -> set -> set
            val partition : (elt -> bool) -> set -> set * set
            val cardinal : set -> int
            val elements : set -> elt list
            val min_elt : set -> elt
            val max_elt : set -> elt
            val choose : set -> elt
            val split : elt -> set -> set * bool * set
            val of_seq : elt t -> set
            val to_seq : set -> elt t
          end
      module Make :
        functor (X : Set.OrderedType->
          sig
            type set
            type elt = X.t
            val empty : set
            val is_empty : set -> bool
            val mem : elt -> set -> bool
            val add : elt -> set -> set
            val singleton : elt -> set
            val remove : elt -> set -> set
            val union : set -> set -> set
            val inter : set -> set -> set
            val diff : set -> set -> set
            val compare : set -> set -> int
            val equal : set -> set -> bool
            val subset : set -> set -> bool
            val iter : (elt -> unit) -> set -> unit
            val fold : (elt -> '-> 'a) -> set -> '-> 'a
            val for_all : (elt -> bool) -> set -> bool
            val exists : (elt -> bool) -> set -> bool
            val filter : (elt -> bool) -> set -> set
            val partition : (elt -> bool) -> set -> set * set
            val cardinal : set -> int
            val elements : set -> elt list
            val min_elt : set -> elt
            val max_elt : set -> elt
            val choose : set -> elt
            val split : elt -> set -> set * bool * set
            val of_seq : elt t -> set
            val to_seq : set -> elt t
          end
    end
  module Map :
    sig
      module type S =
        sig
          type +'a map
          type key
          val empty : 'a map
          val is_empty : 'a map -> bool
          val mem : key -> 'a map -> bool
          val add : key -> '-> 'a map -> 'a map
          val singleton : key -> '-> 'a map
          val remove : key -> 'a map -> 'a map
          val merge :
            (key -> 'a option -> 'b option -> 'c option) ->
            'a map -> 'b map -> 'c map
          val compare : ('-> '-> int) -> 'a map -> 'a map -> int
          val equal : ('-> '-> bool) -> 'a map -> 'a map -> bool
          val iter : (key -> '-> unit) -> 'a map -> unit
          val fold : (key -> '-> '-> 'b) -> 'a map -> '-> 'b
          val for_all : (key -> '-> bool) -> 'a map -> bool
          val exists : (key -> '-> bool) -> 'a map -> bool
          val filter : (key -> '-> bool) -> 'a map -> 'a map
          val partition : (key -> '-> bool) -> 'a map -> 'a map * 'a map
          val cardinal : 'a map -> int
          val bindings : 'a map -> (key * 'a) list
          val min_binding : 'a map -> key * 'a
          val max_binding : 'a map -> key * 'a
          val choose : 'a map -> key * 'a
          val split : key -> 'a map -> 'a map * 'a option * 'a map
          val find : key -> 'a map -> 'a
          val map : ('-> 'b) -> 'a map -> 'b map
          val mapi : (key -> '-> 'b) -> 'a map -> 'b map
          val to_seq : 'Sequence.Map.S.map -> (key * 'a) Sequence.t
          val of_seq : (key * 'a) Sequence.t -> 'Sequence.Map.S.map
          val keys : 'Sequence.Map.S.map -> key Sequence.t
          val values : 'Sequence.Map.S.map -> 'Sequence.t
        end
      module Adapt :
        functor (M : Map.S->
          sig
            type 'a map = 'M.t
            type key = M.key
            val empty : 'a map
            val is_empty : 'a map -> bool
            val mem : key -> 'a map -> bool
            val add : key -> '-> 'a map -> 'a map
            val singleton : key -> '-> 'a map
            val remove : key -> 'a map -> 'a map
            val merge :
              (key -> 'a option -> 'b option -> 'c option) ->
              'a map -> 'b map -> 'c map
            val compare : ('-> '-> int) -> 'a map -> 'a map -> int
            val equal : ('-> '-> bool) -> 'a map -> 'a map -> bool
            val iter : (key -> '-> unit) -> 'a map -> unit
            val fold : (key -> '-> '-> 'b) -> 'a map -> '-> 'b
            val for_all : (key -> '-> bool) -> 'a map -> bool
            val exists : (key -> '-> bool) -> 'a map -> bool
            val filter : (key -> '-> bool) -> 'a map -> 'a map
            val partition : (key -> '-> bool) -> 'a map -> 'a map * 'a map
            val cardinal : 'a map -> int
            val bindings : 'a map -> (key * 'a) list
            val min_binding : 'a map -> key * 'a
            val max_binding : 'a map -> key * 'a
            val choose : 'a map -> key * 'a
            val split : key -> 'a map -> 'a map * 'a option * 'a map
            val find : key -> 'a map -> 'a
            val map : ('-> 'b) -> 'a map -> 'b map
            val mapi : (key -> '-> 'b) -> 'a map -> 'b map
            val to_seq : 'a map -> (key * 'a) t
            val of_seq : (key * 'a) t -> 'a map
            val keys : 'a map -> key t
            val values : 'a map -> 'a t
          end
      module Make :
        functor (V : Map.OrderedType->
          sig
            type +'a map
            type key = V.t
            val empty : 'a map
            val is_empty : 'a map -> bool
            val mem : key -> 'a map -> bool
            val add : key -> '-> 'a map -> 'a map
            val singleton : key -> '-> 'a map
            val remove : key -> 'a map -> 'a map
            val merge :
              (key -> 'a option -> 'b option -> 'c option) ->
              'a map -> 'b map -> 'c map
            val compare : ('-> '-> int) -> 'a map -> 'a map -> int
            val equal : ('-> '-> bool) -> 'a map -> 'a map -> bool
            val iter : (key -> '-> unit) -> 'a map -> unit
            val fold : (key -> '-> '-> 'b) -> 'a map -> '-> 'b
            val for_all : (key -> '-> bool) -> 'a map -> bool
            val exists : (key -> '-> bool) -> 'a map -> bool
            val filter : (key -> '-> bool) -> 'a map -> 'a map
            val partition : (key -> '-> bool) -> 'a map -> 'a map * 'a map
            val cardinal : 'a map -> int
            val bindings : 'a map -> (key * 'a) list
            val min_binding : 'a map -> key * 'a
            val max_binding : 'a map -> key * 'a
            val choose : 'a map -> key * 'a
            val split : key -> 'a map -> 'a map * 'a option * 'a map
            val find : key -> 'a map -> 'a
            val map : ('-> 'b) -> 'a map -> 'b map
            val mapi : (key -> '-> 'b) -> 'a map -> 'b map
            val to_seq : 'a map -> (key * 'a) t
            val of_seq : (key * 'a) t -> 'a map
            val keys : 'a map -> key t
            val values : 'a map -> 'a t
          end
    end
  val random_int : int -> int Sequence.t
  val random_bool : bool Sequence.t
  val random_float : float -> float Sequence.t
  val random_array : 'a array -> 'Sequence.t
  val random_list : 'a list -> 'Sequence.t
  module TypeClass :
    sig
      type ('a, 'b) sequenceable = {
        to_seq : '-> 'Sequence.t;
        of_seq : 'Sequence.t -> 'b;
      }
      type ('a, 'b) addable = { empty : 'b; add : '-> '-> 'b; }
      type 'a monoid = ('a, 'a) Sequence.TypeClass.addable
      type ('a, 'b) iterable = { iter : ('-> unit) -> '-> unit; }
      val sequenceable : ('a, 'Sequence.t) Sequence.TypeClass.sequenceable
      val iterable : ('a, 'Sequence.t) Sequence.TypeClass.iterable
      val monoid : 'Sequence.t Sequence.TypeClass.monoid
      val of_iterable :
        ('a, 'b) Sequence.TypeClass.iterable -> '-> 'Sequence.t
      val to_addable :
        ('a, 'b) Sequence.TypeClass.addable -> 'Sequence.t -> 'b
    end
  module Infix :
    sig
      val ( -- ) : int -> int -> int Sequence.t
      val ( |> ) : '-> ('-> 'b) -> 'b
      val ( @@ ) : 'Sequence.t -> 'Sequence.t -> 'Sequence.t
    end
  val pp_seq :
    ?sep:string ->
    (Format.formatter -> '-> unit) ->
    Format.formatter -> 'Sequence.t -> unit
end