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 : f:('-> unit) -> 'a list -> unit
  val map : f:('-> '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_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 mem : '-> set:'a list -> bool
  val memq : '-> set:'a list -> bool
  val find : f:('-> bool) -> 'a list -> 'a
  val filter : f:('-> bool) -> 'a list -> 'a list
  val find_all : f:('-> bool) -> 'a list -> 'a list
  val partition : f:('-> bool) -> 'a list -> 'a list * 'a list
  val assoc : '-> ('a * 'b) list -> 'b
  val assq : '-> ('a * 'b) list -> 'b
  val mem_assoc : '-> map:('a * 'b) list -> bool
  val mem_assq : '-> map:('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 : cmp:('-> '-> int) -> 'a list -> 'a list
  val stable_sort : cmp:('-> '-> int) -> 'a list -> 'a list
end