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