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