module V : sig include Custom.T val make_id : ?repr:string -> string -> t end type var = [ `Var of V.t ] include Custom.T with type t = var val pp : Format.formatter -> var -> unit val mk : ?repr:string -> string -> var val fresh : ?pre:string -> unit -> var val id : var -> string module Set : sig include Custom.T val dump : Format.formatter -> t -> unit val pp : Format.formatter -> t -> unit val printf : t -> unit val is_empty : t -> bool val empty : t val singleton : var -> t val union : t -> t -> t val diff : t -> t -> t val mem : var -> t -> bool val add : var -> t -> t val inter : t -> t -> t val subset : t -> t -> bool val cardinal : t -> int val from_list : var list -> t end type 'a pairvar = [ `Atm of 'a | var ] module type MAKE = functor (X : Custom.T) -> Custom.T with type t = X.t pairvar module Make : MAKE