sig
  type set
  type 'base t
  val base : 'base -> 'base Set_lang_intf.S_lang.t
  val set : Set_lang_intf.S_lang.set -> 'Set_lang_intf.S_lang.t
  val inter2 :
    'Set_lang_intf.S_lang.t ->
    'Set_lang_intf.S_lang.t -> 'Set_lang_intf.S_lang.t
  val union2 :
    'Set_lang_intf.S_lang.t ->
    'Set_lang_intf.S_lang.t -> 'Set_lang_intf.S_lang.t
  val diff :
    'Set_lang_intf.S_lang.t ->
    'Set_lang_intf.S_lang.t -> 'Set_lang_intf.S_lang.t
  val union : 'Set_lang_intf.S_lang.t list -> 'Set_lang_intf.S_lang.t
  val inter :
    'Set_lang_intf.S_lang.t * 'Set_lang_intf.S_lang.t list ->
    'Set_lang_intf.S_lang.t
  val inter_list :
    'Set_lang_intf.S_lang.t list ->
    'Set_lang_intf.S_lang.t Core.Std.Or_error.t
  val inter_list_exn :
    'Set_lang_intf.S_lang.t list -> 'Set_lang_intf.S_lang.t
  val values : 'base Set_lang_intf.S_lang.t -> 'base list
  val constant_value :
    'Set_lang_intf.S_lang.t -> Set_lang_intf.S_lang.set 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:('-> set option value) -> 'b t value
  val eval : 'b t -> f:('-> set value) -> set 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 option M.t) -> 'b t M.t
        val eval : 'b t -> f:('-> set M.t) -> set M.t
      end
end