(** [replace lst tag newval] Replace or add an entry to an alist. *) val replace : ('a * 'b) list -> 'a -> 'b -> ('a * 'b) list (** Merge a list of alists, with the first occurrence of each attribute taking precedence. *) val merge : ('a * 'b) list list -> ('a * 'b) list (** Strip any attributes present in a out of b *) val diff : ('a * 'b) list -> ('a * 'c) list -> ('a * 'c) list (** Add a pair to an alist, but don't replace current value. *) val no_replace : ('a * 'b) list -> 'a -> 'b -> ('a * 'b) list (** Return a list of all values for an attribute. *) val assoc_all : 'a -> ('a * 'b) list -> 'b list val assoc_opt : 'a -> ('a * 'b) list -> 'b option val invert : ('a * 'b) list -> ('b * 'a) list (** List2.enumerate *) val enumerate : 'a list -> (int * 'a) list val sort_car : ('a -> 'a -> int) -> ('a * 'b) list -> ('a * 'b) list val sort_cdr : ('a -> 'a -> int) -> ('b * 'a) list -> ('b * 'a) list (** List.assoc *) val assoc : 'a -> ('a * 'b) list -> 'b (** List.remove_assoc *) val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list (** List.split *) val split : ('a * 'b) list -> 'a list * 'b list