sig
  val swap : 'a * 'b -> 'b * 'a
  type 'a multi = { melt : 'a; count : int; } 
  val multi : int -> 'a -> 'a Util.multi
  type 'a weighed = { welt : 'a; weigh : int; } 
  val weigh : int -> 'a -> 'a Util.weighed
  val compare_by_weight : 'a Util.weighed -> 'b Util.weighed -> int
  val apply_weight_and_sort : ('a -> int) -> 'a list -> 'a Util.weighed list
  val allpairs : 'a list -> 'b list -> ('a * 'b) list
  val list_repeat : int -> 'a -> 'a list
  val pairmap : ('a * 'b -> 'c) -> 'a list -> 'b list -> 'c list
  val choosepairs : 'a list -> ('a * 'a) list
  val choosepairmap : ('a * 'a -> 'b) -> 'a list -> 'b list
  val linter : ('a -> 'b -> bool) -> 'a list -> 'b list -> ('a * 'b) list
  val lmultinter :
    ('a -> 'b -> 'c list) -> 'a list -> 'b list -> (('a * 'b) * 'c) list
  exception Skip
  val pilemap : ('a -> 'b) -> 'a list -> 'b list
  val all_matches : Str.regexp -> string -> int -> (int * int) list
  val array_filteri : ('a -> bool) -> 'a array -> int array
  val array_fold_lefti : ('a -> int -> 'b -> 'a) -> 'a -> 'b array -> 'a
  val array_add : 'a array -> 'a -> 'a array
  val removeq : 'a -> 'a list -> 'a list
  val remove : 'a -> 'a list -> 'a list
  val removeq_first : 'a -> 'a list -> 'a list
  val remove_first : 'a -> 'a list -> 'a list
  val sym_assoc : 'a -> ('a * 'a) list -> 'a
  val sym_assoc_elem : 'a -> ('a * 'a) list -> ('a * 'a) * 'a
  val fst3 : 'a * 'b * 'c -> 'a
  val snd3 : 'a * 'b * 'c -> 'b
  val trd3 : 'a * 'b * 'c -> 'c
end