sig
  val init : int -> (int -> 'a) -> 'a list
  val return : ('-> 'b option) -> 'a list -> 'b
  val return_opt : ('-> 'b option) -> 'a list -> 'b option
  val map_opt : ('-> 'b option) -> 'a list -> 'b list
  val assoc_err : '-> ('a * 'b) list -> err:string -> 'b
  val assoc_def : '-> ('a * 'b) list -> def:'-> 'b
  val assoc_replace : '-> '-> ('a * 'b) list -> ('a * 'b) list
  val take : int -> 'a list -> 'a list
  val drop : int -> 'a list -> 'a list
  val uniq : 'a list -> 'a list
  val index : '-> 'a list -> int list
  val starts_with : 'a list -> 'a list -> bool
end