sig
  type 'a sequence = ('a -> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a equal = 'a -> 'a -> bool
  type 'a ord = 'a -> 'a -> int
  type 'a printer = Buffer.t -> 'a -> unit
  type 'a formatter = Format.formatter -> 'a -> unit
  type 'a t = unit -> [ `Cons of 'a * 'a CCKList.t | `Nil ]
  val nil : 'a CCKList.t
  val empty : 'a CCKList.t
  val cons : 'a -> 'a CCKList.t -> 'a CCKList.t
  val singleton : 'a -> 'a CCKList.t
  val repeat : ?n:int -> 'a -> 'a CCKList.t
  val cycle : 'a CCKList.t -> 'a CCKList.t
  val unfold : ('b -> ('a * 'b) option) -> 'b -> 'a CCKList.t
  val is_empty : 'a CCKList.t -> bool
  val head : 'a CCKList.t -> 'a option
  val head_exn : 'a CCKList.t -> 'a
  val tail : 'a CCKList.t -> 'a CCKList.t option
  val tail_exn : 'a CCKList.t -> 'a CCKList.t
  val equal : 'a CCKList.equal -> 'a CCKList.t CCKList.equal
  val compare : 'a CCKList.ord -> 'a CCKList.t CCKList.ord
  val fold : ('a -> 'b -> 'a) -> 'a -> 'b CCKList.t -> 'a
  val iter : ('a -> unit) -> 'a CCKList.t -> unit
  val iteri : (int -> 'a -> unit) -> 'a CCKList.t -> unit
  val length : 'a CCKList.t -> int
  val take : int -> 'a CCKList.t -> 'a CCKList.t
  val take_while : ('a -> bool) -> 'a CCKList.t -> 'a CCKList.t
  val drop : int -> 'a CCKList.t -> 'a CCKList.t
  val drop_while : ('a -> bool) -> 'a CCKList.t -> 'a CCKList.t
  val map : ('a -> 'b) -> 'a CCKList.t -> 'b CCKList.t
  val mapi : (int -> 'a -> 'b) -> 'a CCKList.t -> 'b CCKList.t
  val fmap : ('a -> 'b option) -> 'a CCKList.t -> 'b CCKList.t
  val filter : ('a -> bool) -> 'a CCKList.t -> 'a CCKList.t
  val append : 'a CCKList.t -> 'a CCKList.t -> 'a CCKList.t
  val product_with :
    ('a -> 'b -> 'c) -> 'a CCKList.t -> 'b CCKList.t -> 'c CCKList.t
  val product : 'a CCKList.t -> 'b CCKList.t -> ('a * 'b) CCKList.t
  val group : 'a CCKList.equal -> 'a CCKList.t -> 'a CCKList.t CCKList.t
  val uniq : 'a CCKList.equal -> 'a CCKList.t -> 'a CCKList.t
  val flat_map : ('a -> 'b CCKList.t) -> 'a CCKList.t -> 'b CCKList.t
  val filter_map : ('a -> 'b option) -> 'a CCKList.t -> 'b CCKList.t
  val flatten : 'a CCKList.t CCKList.t -> 'a CCKList.t
  val range : int -> int -> int CCKList.t
  val ( -- ) : int -> int -> int CCKList.t
  val ( --^ ) : int -> int -> int CCKList.t
  val fold2 :
    ('acc -> 'a -> 'b -> 'acc) ->
    'acc -> 'a CCKList.t -> 'b CCKList.t -> 'acc
  val map2 : ('a -> 'b -> 'c) -> 'a CCKList.t -> 'b CCKList.t -> 'c CCKList.t
  val iter2 : ('a -> 'b -> unit) -> 'a CCKList.t -> 'b CCKList.t -> unit
  val for_all2 : ('a -> 'b -> bool) -> 'a CCKList.t -> 'b CCKList.t -> bool
  val exists2 : ('a -> 'b -> bool) -> 'a CCKList.t -> 'b CCKList.t -> bool
  val merge : 'a CCKList.ord -> 'a CCKList.t -> 'a CCKList.t -> 'a CCKList.t
  val zip : 'a CCKList.t -> 'b CCKList.t -> ('a * 'b) CCKList.t
  val unzip : ('a * 'b) CCKList.t -> 'a CCKList.t * 'b CCKList.t
  val sort : ?cmp:'a CCKList.ord -> 'a CCKList.t -> 'a CCKList.t
  val sort_uniq : ?cmp:'a CCKList.ord -> 'a CCKList.t -> 'a CCKList.t
  val memoize : 'a CCKList.t -> 'a CCKList.t
  val interleave : 'a CCKList.t -> 'a CCKList.t -> 'a CCKList.t
  val fair_flat_map : ('a -> 'b CCKList.t) -> 'a CCKList.t -> 'b CCKList.t
  val fair_app : ('a -> 'b) CCKList.t -> 'a CCKList.t -> 'b CCKList.t
  val return : 'a -> 'a CCKList.t
  val pure : 'a -> 'a CCKList.t
  val ( >>= ) : 'a CCKList.t -> ('a -> 'b CCKList.t) -> 'b CCKList.t
  val ( >|= ) : 'a CCKList.t -> ('a -> 'b) -> 'b CCKList.t
  val ( <*> ) : ('a -> 'b) CCKList.t -> 'a CCKList.t -> 'b CCKList.t
  val ( >>- ) : 'a CCKList.t -> ('a -> 'b CCKList.t) -> 'b CCKList.t
  val ( <.> ) : ('a -> 'b) CCKList.t -> 'a CCKList.t -> 'b CCKList.t
  module Infix :
    sig
      val ( >>= ) : 'a CCKList.t -> ('a -> 'b CCKList.t) -> 'b CCKList.t
      val ( >|= ) : 'a CCKList.t -> ('a -> 'b) -> 'b CCKList.t
      val ( <*> ) : ('a -> 'b) CCKList.t -> 'a CCKList.t -> 'b CCKList.t
      val ( >>- ) : 'a CCKList.t -> ('a -> 'b CCKList.t) -> 'b CCKList.t
      val ( <.> ) : ('a -> 'b) CCKList.t -> 'a CCKList.t -> 'b CCKList.t
      val ( -- ) : int -> int -> int CCKList.t
      val ( --^ ) : int -> int -> int CCKList.t
    end
  module type MONAD =
    sig
      type 'a t
      val return : 'a -> 'a CCKList.MONAD.t
      val ( >>= ) :
        'a CCKList.MONAD.t ->
        ('a -> 'b CCKList.MONAD.t) -> 'b CCKList.MONAD.t
    end
  module Traverse :
    functor (M : MONAD) ->
      sig
        val sequence_m : 'a M.t CCKList.t -> 'a CCKList.t M.t
        val fold_m : ('b -> 'a -> 'b M.t) -> 'b -> 'a CCKList.t -> 'b M.t
        val map_m : ('a -> 'b M.t) -> 'a CCKList.t -> 'b CCKList.t M.t
      end
  val of_list : 'a list -> 'a CCKList.t
  val to_list : 'a CCKList.t -> 'a list
  val of_array : 'a array -> 'a CCKList.t
  val to_array : 'a CCKList.t -> 'a array
  val to_rev_list : 'a CCKList.t -> 'a list
  val to_seq : 'a CCKList.t -> 'a CCKList.sequence
  val to_gen : 'a CCKList.t -> 'a CCKList.gen
  val of_gen : 'a CCKList.gen -> 'a CCKList.t
  val pp : ?sep:string -> 'a CCKList.printer -> 'a CCKList.t CCKList.printer
  val print :
    ?sep:string -> 'a CCKList.formatter -> 'a CCKList.t CCKList.formatter
end