sig
  val find : ('-> bool) -> 'a list -> 'a option
  val rfind : ('-> bool) -> 'a list -> 'a option
  val findi : (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
  val find_map : ('-> 'b option) -> 'a list -> 'b option
  val hd : 'a list -> 'a option
  val tl : 'a list -> 'a list option
  val last : 'a list -> 'a option
  val reduce : ('-> '-> 'a) -> 'a list -> 'a option
  val min_max : ?cmp:('-> '-> int) -> 'a list -> ('a * 'a) option
  val max : ?cmp:('-> '-> int) -> 'a list -> 'a option
  val min : ?cmp:('-> '-> int) -> 'a list -> 'a option
end