sig
  type kind
  type t
  val ty : Kind.SELECTION.t Type.t
  val empty : Kind.SELECTION.t
  val is_empty : Kind.SELECTION.t -> bool
  val add :
    Kind.SELECTION.kind -> Kind.how -> Kind.SELECTION.t -> Kind.SELECTION.t
  val singleton : Kind.SELECTION.kind -> Kind.how -> Kind.SELECTION.t
  val remove : Kind.SELECTION.kind -> Kind.SELECTION.t -> Kind.SELECTION.t
  val iter :
    (Kind.SELECTION.kind -> Kind.how -> unit) -> Kind.SELECTION.t -> unit
  val fold :
    (Kind.SELECTION.kind -> Kind.how -> '-> 'a) ->
    Kind.SELECTION.t -> '-> 'a
end