sig
  val length : 'a list -> int
  val hd : 'a list -> 'a
  val tl : 'a list -> 'a list
  val nth : 'a list -> int -> 'a
  val rev : 'a list -> 'a list
  val append : 'a list -> 'a list -> 'a list
  val rev_append : 'a list -> 'a list -> 'a list
  val concat : 'a list list -> 'a list
  val flatten : 'a list list -> 'a list
  val iter : ('a -> unit) -> 'a list -> unit
  val map : ('a -> 'b) -> 'a list -> 'b list
  val rev_map : ('a -> 'b) -> 'a list -> 'b list
  val fold_left : ('a -> 'b -> 'a) -> 'a -> 'b list -> 'a
  val fold_right : ('a -> 'b -> 'b) -> 'a list -> 'b -> 'b
  val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit
  val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
  val rev_map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list
  val fold_left2 : ('a -> 'b -> 'c -> 'a) -> 'a -> 'b list -> 'c list -> 'a
  val fold_right2 : ('a -> 'b -> 'c -> 'c) -> 'a list -> 'b list -> 'c -> 'c
  val for_all : ('a -> bool) -> 'a list -> bool
  val exists : ('a -> bool) -> 'a list -> bool
  val for_all2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
  val exists2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
  val mem : 'a -> 'a list -> bool
  val memq : 'a -> 'a list -> bool
  val find : ('a -> bool) -> 'a list -> 'a
  val filter : ('a -> bool) -> 'a list -> 'a list
  val find_all : ('a -> bool) -> 'a list -> 'a list
  val partition : ('a -> bool) -> 'a list -> 'a list * 'a list
  val assoc : 'a -> ('a * 'b) list -> 'b
  val assq : 'a -> ('a * 'b) list -> 'b
  val mem_assoc : 'a -> ('a * 'b) list -> bool
  val mem_assq : 'a -> ('a * 'b) list -> bool
  val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list
  val remove_assq : 'a -> ('a * 'b) list -> ('a * 'b) list
  val split : ('a * 'b) list -> 'a list * 'b list
  val combine : 'a list -> 'b list -> ('a * 'b) list
  val sort : ('a -> 'a -> int) -> 'a list -> 'a list
  val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list
  val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list
  val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list
  type 'a t = 'a list
  val of_option : 'a option -> 'a list
  val for_ : 'a list -> ('a -> 'b) -> unit
  val map_to_array : ('a -> 'b) -> 'a list -> 'b array
  val reduce : 'a Monoid.t -> 'a t -> 'a
  val map_reduce_left : ('a -> 'b) -> 'b Monoid.t -> 'a t -> 'b
  val map_reduce : ('a -> 'b) -> 'b Monoid.t -> 'a t -> 'b
  val reduce_left : ('a -> 'b) -> ('b -> 'b -> 'b) -> 'a list -> 'b
  val remove_nth_fast : int -> 'a list -> 'a list
  val remove_nth_tailrec : int -> 'a list -> 'a list
  val order_by_length : 'a list -> 'a list -> 'a list * 'a list
  val rev_map_append : 'a list -> ('a -> 'b) -> 'b list -> 'b list
  val find_opt : ('a -> bool) -> 'a list -> 'a option
  val drop_while : ('a -> bool) -> 'a list -> 'a list
  val last_exn : 'a list -> 'a
  val last_opt : 'a list -> 'a option
  val concat_with : 'a list -> 'a list list -> 'a list
  val split_by_first : ('a -> bool) -> 'a list -> 'a list * 'a list * 'a list
  val split_by : ('a -> bool) -> 'a list -> 'a list list
  val map_filter : ('a -> 'b option) -> 'a list -> 'b list
  val hd_opt : 'a list -> 'a option
  val hd_exn : 'a list -> 'a
  val get_single : 'a list -> 'a
  val get_pair : 'a list -> 'a * 'a
  module Assoc :
    sig
      val map_rwm_assoc_stack_limit : int
      val index_opt :
        keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> int option
      val get_exn : keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> 'c
      val get_all : keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> 'c list
      val get_opt :
        keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> 'c option
      val mem : keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> bool
      val add : 'a -> 'b -> ('a * 'b) list -> ('a * 'b) list
      val remove :
        keq:('a -> 'b -> bool) -> 'a -> ('b * 'c) list -> ('b * 'c) list
      val to_arrays : ('a * 'b) list -> 'a array * 'b array
      val replace :
        keq:('a -> 'a -> bool) ->
        'a -> 'b -> ('a * 'b) list -> ('a * 'b) list
    end
  module Monad :
    sig
      type 'a t = 'a list
      val return : 'a -> 'a t
      val bind : ('a -> 'b t) -> 'a t -> 'b t
      val bind_rev : 'a t -> ('a -> 'b t) -> 'b t
      val ( >>= ) : 'a t -> ('a -> 'b t) -> 'b t
    end
  val map_accum_left : ('a -> 'b -> 'a * 'c) -> 'a -> 'b list -> 'a * 'c list
  val fmap : ('a -> 'b) -> 'a list -> 'b list
  val dump :
    ?begins:string ->
    ?ends:string -> ?delim:string -> 'a #Cdt.tti -> 'a list -> string
  class ['a] ti :
    ?cmp:('a -> 'a -> Cdt.cmp_res) ->
    ?eq:('a -> 'a -> bool) ->
    ?hash:('a -> int) ->
    ?show:('a -> string) ->
    'b #Cdt.tti ->
    unit ->
    object
      constraint 'a = 'b list
      val v_type_name : Cdt.type_name option ref
      method cmp : 'a -> 'a -> Cdt.cmp_res
      method eq : 'a -> 'a -> bool
      method get_exn : Cdt.ubox -> 'a
      method hash : 'a -> int
      method meths : Cdt.R.meth_table
      method polyapp_Ab : 'c Cdt.polyapp_Ab -> Cdt.ubox -> 'c
      method put_func : 'a -> unit -> unit
      method show : 'a -> string
      method type_desc : Cdt.type_desc
      method type_id : Cdt.Type_id.t
      method type_name : Cdt.type_name
    end
  val ti_list_string : string list ti
end