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