sig
  val map2i : (int -> '-> '-> 'c) -> 'a list -> 'b list -> 'c list
  val fold_righti :
    (int -> 'elt -> 'acc -> 'acc) -> 'elt list -> 'acc -> 'acc
  val fold_lefti : (int -> 'acc -> 'elt -> 'acc) -> 'acc -> 'elt list -> 'acc
  val fold_left2i :
    (int -> 'acc -> '-> '-> 'acc) -> 'acc -> 'b list -> 'c list -> 'acc
  val fold_left3 :
    ('acc -> 't1 -> 't2 -> 't3 -> 'acc) ->
    'acc -> 't1 list -> 't2 list -> 't3 list -> 'acc
  val reduce : ('-> '-> 'a) -> 'a list -> 'a
  val iter2i : (int -> '-> '-> unit) -> 'a list -> 'b list -> unit
  val iter3 :
    ('-> '-> '-> unit) -> 'a list -> 'b list -> 'c list -> unit
  val combine3 : 'a list -> 'b list -> 'c list -> ('a * 'b * 'c) list
  val split3 : ('a * 'b * 'c) list -> 'a list * 'b list * 'c list
  val make : int -> (int -> 'a) -> 'a list
  val last : 'a list -> 'a
  val ignore_map : ('-> 'b) -> 'a list -> unit
  val check_for_duplicates : ('-> '-> int) -> 'a list -> ('a * 'a) option
  val exit_if_duplicates :
    ('-> '-> int) -> ('-> 'b) -> 'a list -> ('-> 'a list) -> 'a list
  val max : int list -> int
  val filter_some : 'a option list -> 'a list
  val map_some : ('-> 'b option) -> 'a list -> 'b list
  val nth_opt : 'a list -> int -> 'a option
  val index : ('-> bool) -> 'a list -> int
  val take : ('-> 'b option) -> 'a list -> ('a list * ('a * 'b)) option
  val take_bool : ('-> bool) -> 'a list -> ('a list * 'a) option
  val find_opt : ('-> 'b option) -> 'a list -> 'b option
  val find_opti : (int -> '-> 'b option) -> 'a list -> 'b option
  val flatten_map : ('-> 'b list) -> 'a list -> 'b list
  val split_map : ('-> 'b * 'c) -> 'a list -> 'b list * 'c list
  val cut : int -> 'a list -> 'a list
  val equal : ('-> '-> bool) -> 'a list -> 'b list -> bool
  val cps_map : ('-> ('-> 'c) -> 'c) -> 'a list -> ('b list -> 'c) -> 'c
  val map : ('-> 'a) -> 'a list -> 'a list
end