sig
  module type SS_WO_ME =
    sig
      type t
      val is_empty : LowerUpper.SS_WO_ME.t -> bool
      val subset :
        LowerUpper.SS_WO_ME.t -> LowerUpper.SS_WO_ME.t -> bool option
      val inter :
        LowerUpper.SS_WO_ME.t ->
        LowerUpper.SS_WO_ME.t -> LowerUpper.SS_WO_ME.t
      val union :
        LowerUpper.SS_WO_ME.t ->
        LowerUpper.SS_WO_ME.t -> LowerUpper.SS_WO_ME.t
      val compare : LowerUpper.SS_WO_ME.t -> LowerUpper.SS_WO_ME.t -> int
      val string_of : LowerUpper.SS_WO_ME.t -> string
      val normalize : LowerUpper.SS_WO_ME.t -> LowerUpper.SS_WO_ME.t
    end
  module type SMALLSET =
    sig
      type t
      val is_empty : t -> bool
      val subset : t -> t -> bool option
      val inter : t -> t -> t
      val union : t -> t -> t
      val compare : t -> t -> int
      val string_of : t -> string
      val normalize : t -> t
      val make_eq_lower : t -> t -> bool * t
      val make_eq_upper : t -> t -> bool * t
      val make_eq_eq : t -> t -> bool * t
    end
  module type S =
    sig
      type 'a d =
          [ `Eq of '| `Lower of '| `LowerUpper of 'a * '| `Upper of 'a ]
      type elm
      type t = LowerUpper.S.elm LowerUpper.S.d
      val create_lower : LowerUpper.S.elm -> LowerUpper.S.t
      val create_upper : LowerUpper.S.elm -> LowerUpper.S.t
      val create_lowerupper :
        LowerUpper.S.elm -> LowerUpper.S.elm -> LowerUpper.S.t
      val compare : LowerUpper.S.t -> LowerUpper.S.t -> int
      val merge : LowerUpper.S.t -> LowerUpper.S.t -> LowerUpper.S.t
      val get_exact : LowerUpper.S.t -> LowerUpper.S.elm option
      val string_of : LowerUpper.S.t -> string
      val normalize : LowerUpper.S.t -> LowerUpper.S.t
    end
  module Make :
    functor (Set : SMALLSET->
      sig
        type 'a d =
            [ `Eq of 'a
            | `Lower of 'a
            | `LowerUpper of 'a * 'a
            | `Upper of 'a ]
        type elm = Set.t
        type t = elm d
        val create_lower : elm -> t
        val create_upper : elm -> t
        val create_lowerupper : elm -> elm -> t
        val compare : t -> t -> int
        val merge : t -> t -> t
        val get_exact : t -> elm option
        val string_of : t -> string
        val normalize : t -> t
      end
end