sig
  module Set : Core.Std.Set.S
  type 'base t = ('base, Set.t) 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 Set_lang_intf.value) -> 'b2 t Set_lang_intf.value
  val map :
    'b1 t -> f:('b1 -> 'b2 Set_lang_intf.value) -> 'b2 t Set_lang_intf.value
  val specialize :
    'b t ->
    f:('-> Set.t option Set_lang_intf.value) -> 'b t Set_lang_intf.value
  val eval :
    'b t -> f:('-> Set.t Set_lang_intf.value) -> Set.t Set_lang_intf.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:('-> Set.t option M.t) -> 'b t M.t
        val eval : 'b t -> f:('-> Set.t M.t) -> Set.t M.t
      end
  val t_of_sexp : (Sexplib.Sexp.t -> 'base) -> Sexplib.Sexp.t -> 'base t
  val sexp_of_t : ('base -> Sexplib.Sexp.t) -> 'base t -> Sexplib.Sexp.t
  val compare : ('base -> 'base -> int) -> 'base t -> 'base t -> int
end