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 : ('-> unit) -> 'a list -> unit
  val map : ('-> 'b) -> 'a list -> 'b list
  val rev_map : ('-> 'b) -> 'a list -> 'b list
  val fold_left : ('-> '-> 'a) -> '-> 'b list -> 'a
  val fold_right : ('-> '-> 'b) -> 'a list -> '-> 'b
  val iter2 : ('-> '-> unit) -> 'a list -> 'b list -> unit
  val map2 : ('-> '-> 'c) -> 'a list -> 'b list -> 'c list
  val rev_map2 : ('-> '-> 'c) -> 'a list -> 'b list -> 'c list
  val fold_left2 : ('-> '-> '-> 'a) -> '-> 'b list -> 'c list -> 'a
  val fold_right2 : ('-> '-> '-> 'c) -> 'a list -> 'b list -> '-> 'c
  val for_all : ('-> bool) -> 'a list -> bool
  val exists : ('-> bool) -> 'a list -> bool
  val for_all2 : ('-> '-> bool) -> 'a list -> 'b list -> bool
  val exists2 : ('-> '-> bool) -> 'a list -> 'b list -> bool
  val mem : '-> 'a list -> bool
  val memq : '-> 'a list -> bool
  val find : ('-> bool) -> 'a list -> 'a
  val filter : ('-> bool) -> 'a list -> 'a list
  val find_all : ('-> bool) -> 'a list -> 'a list
  val partition : ('-> bool) -> 'a list -> 'a list * 'a list
  val assoc : '-> ('a * 'b) list -> 'b
  val assq : '-> ('a * 'b) list -> 'b
  val mem_assoc : '-> ('a * 'b) list -> bool
  val mem_assq : '-> ('a * 'b) list -> bool
  val remove_assoc : '-> ('a * 'b) list -> ('a * 'b) list
  val remove_assq : '-> ('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 : ('-> '-> int) -> 'a list -> 'a list
  val stable_sort : ('-> '-> int) -> 'a list -> 'a list
  val fast_sort : ('-> '-> int) -> 'a list -> 'a list
  val merge : ('-> '-> int) -> 'a list -> 'a list -> 'a list
  type 'a t = 'a list
  val of_option : 'a option -> 'a list
  val for_ : 'a list -> ('-> 'b) -> unit
  val map_to_array : ('-> 'b) -> 'a list -> 'b array
  val reduce : 'Monoid.t -> 'a t -> 'a
  val map_reduce_left : ('-> 'b) -> 'Monoid.t -> 'a t -> 'b
  val map_reduce : ('-> 'b) -> 'Monoid.t -> 'a t -> 'b
  val reduce_left : ('-> '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 -> ('-> 'b) -> 'b list -> 'b list
  val find_opt : ('-> bool) -> 'a list -> 'a option
  val drop_while : ('-> 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 : ('-> bool) -> 'a list -> 'a list * 'a list * 'a list
  val split_by : ('-> bool) -> 'a list -> 'a list list
  val map_filter : ('-> '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:('-> '-> bool) -> '-> ('b * 'c) list -> int option
      val get_exn : keq:('-> '-> bool) -> '-> ('b * 'c) list -> 'c
      val get_all : keq:('-> '-> bool) -> '-> ('b * 'c) list -> 'c list
      val get_opt :
        keq:('-> '-> bool) -> '-> ('b * 'c) list -> 'c option
      val mem : keq:('-> '-> bool) -> '-> ('b * 'c) list -> bool
      val add : '-> '-> ('a * 'b) list -> ('a * 'b) list
      val remove :
        keq:('-> '-> bool) -> '-> ('b * 'c) list -> ('b * 'c) list
      val to_arrays : ('a * 'b) list -> 'a array * 'b array
      val replace :
        keq:('-> '-> bool) ->
        '-> '-> ('a * 'b) list -> ('a * 'b) list
    end
  module Monad :
    sig
      type 'a t = 'a list
      val return : '-> 'a t
      val bind : ('-> 'b t) -> 'a t -> 'b t
      val bind_rev : 'a t -> ('-> 'b t) -> 'b t
      val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
    end
  val map_accum_left : ('-> '-> 'a * 'c) -> '-> 'b list -> 'a * 'c list
  val fmap : ('-> 'b) -> 'a list -> 'b list
  val dump :
    ?begins:string ->
    ?ends:string -> ?delim:string -> '#Cdt.tti -> 'a list -> string
  class ['a] ti :
    ?cmp:('-> '-> Cdt.cmp_res) ->
    ?eq:('-> '-> bool) ->
    ?hash:('-> int) ->
    ?show:('-> string) ->
    '#Cdt.tti ->
    unit ->
    object
      constraint 'a = 'b list
      val v_type_name : Cdt.type_name option ref
      method cmp : '-> '-> Cdt.cmp_res
      method eq : '-> '-> bool
      method get_exn : Cdt.ubox -> 'a
      method hash : '-> int
      method meths : Cdt.R.meth_table
      method polyapp_Ab : 'Cdt.polyapp_Ab -> Cdt.ubox -> 'c
      method put_func : '-> unit -> unit
      method show : '-> 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