sig
  val init : int -> f:(int -> 'a) -> 'a list
  val iter : f:('-> unit) -> 'a list -> unit
  val iteri : f:(int -> '-> unit) -> 'a list -> unit
  val map : f:('-> 'b) -> 'a list -> 'b list
  val mapi : f:(int -> '-> 'b) -> 'a list -> 'b list
  val rev_map : f:('-> 'b) -> 'a list -> 'b list
  val fold_left : f:('-> '-> 'a) -> init:'-> 'b list -> 'a
  val fold : f:('-> '-> 'a) -> init:'-> 'b list -> 'a
  val fold_right : f:('-> '-> 'b) -> 'a list -> init:'-> 'b
  val iter2 : f:('-> '-> unit) -> 'a list -> 'b list -> unit
  val map2 : f:('-> '-> 'c) -> 'a list -> 'b list -> 'c list
  val rev_map2 : f:('-> '-> 'c) -> 'a list -> 'b list -> 'c list
  val fold_left2 :
    f:('-> '-> '-> 'a) -> init:'-> 'b list -> 'c list -> 'a
  val fold_right2 :
    f:('-> '-> '-> 'c) -> 'a list -> 'b list -> init:'-> 'c
  val for_all : f:('-> bool) -> 'a list -> bool
  val exists : f:('-> bool) -> 'a list -> bool
  val for_all2 : f:('-> '-> bool) -> 'a list -> 'b list -> bool
  val exists2 : f:('-> '-> bool) -> 'a list -> 'b list -> bool
  val subset : cmp:('-> '-> int) -> 'a list -> 'b list -> bool
  val find : f:('-> bool) -> 'a list -> 'a
  val find_exn : f:('-> bool) -> exn -> 'a list -> 'a
  val find_map_opt : f:('-> 'b option) -> 'a list -> 'b option
  val findi : f:(int -> '-> bool) -> 'a list -> int * 'a
  val rfind : f:('-> bool) -> 'a list -> 'a
  val filter : f:('-> bool) -> 'a list -> 'a list
  val filter_map : f:('-> 'b option) -> 'a list -> 'b list
  val count_matching : f:('-> bool) -> 'a list -> int
  val concat_map : f:('-> 'b list) -> 'a list -> 'b list
  val find_all : f:('-> bool) -> 'a list -> 'a list
  val partition : f:('-> bool) -> 'a list -> 'a list * 'a list
  val partition_map :
    f:('-> ('b, 'c) BatEither.t) -> 'a list -> 'b list * 'c list
  val remove_if : f:('-> bool) -> 'a list -> 'a list
  val take_while : f:('-> bool) -> 'a list -> 'a list
  val drop_while : f:('-> bool) -> 'a list -> 'a list
  val stable_sort : ?cmp:('-> '-> int) -> 'a list -> 'a list
  val fast_sort : ?cmp:('-> '-> int) -> 'a list -> 'a list
  val merge : ?cmp:('-> '-> int) -> 'a list -> 'a list -> 'a list
  module LExceptionless :
    sig
      val find : f:('-> bool) -> 'a list -> 'a option
      val rfind : f:('-> bool) -> 'a list -> 'a option
      val findi : f:(int -> '-> bool) -> 'a list -> (int * 'a) option
      val split_at :
        int ->
        'a list -> [ `Invalid_argument of string | `Ok of 'a list * 'a list ]
      val at : 'a list -> int -> [ `Invalid_argument of string | `Ok of 'a ]
      val assoc : '-> ('a * 'b) list -> 'b option
      val assoc_inv : '-> ('a * 'b) list -> 'a option
      val assq : '-> ('a * 'b) list -> 'b option
    end
end