`sig
module Raw : sig type ('base, 'set) t end
module Set : Core.Std.Set.S
type 'base t = ('base, Set.t) Set_lang_intf.S.Raw.t
val base : 'base -> 'base t
val set : Set.t -> 'a t
val inter2 : 'b t -> 'b t -> 'b t
val union2 : 'b t -> 'b t -> 'b t
val diff : 'b t -> 'b t -> 'b t
val union : 'b t list -> 'b t
val inter : 'b t * 'b t list -> 'b t
val inter_list : 'b t list -> 'b t Core.Std.Or_error.t
val inter_list_exn : 'b t list -> 'b t
val values : 'base t -> 'base list
val constant_value : 'a t -> Set.t option
val subst : 'b1 t -> f:('b1 -> 'b2 t value) -> 'b2 t value
val map : 'b1 t -> f:('b1 -> 'b2 value) -> 'b2 t value
val specialize : 'b t -> f:('b -> Set.t option value) -> 'b t value
val eval : 'b t -> f:('b -> Set.t value) -> Set.t value
module Make_monadic_eval :
functor (M : Core.Std.Monad.S) ->
sig
val subst : 'b1 t -> f:('b1 -> 'b2 t M.t) -> 'b2 t M.t
val map : 'b1 t -> f:('b1 -> 'b2 M.t) -> 'b2 t M.t
val specialize : 'b t -> f:('b -> Set.t option M.t) -> 'b t M.t
val eval : 'b t -> f:('b -> Set.t M.t) -> Set.t M.t
end
val t_of_sexp :
(Sexplib.Sexp.t -> 'base) -> Sexplib.Sexp.t -> 'base Set_lang_intf.S.t
val sexp_of_t :
('base -> Sexplib.Sexp.t) -> 'base Set_lang_intf.S.t -> Sexplib.Sexp.t
val compare :
('base -> 'base -> int) ->
'base Set_lang_intf.S.t -> 'base Set_lang_intf.S.t -> int
end`