functor (X : ORD->
  sig
    type key = X.t
    type t
    val empty : t
    val get : inj:'a injection -> key -> t -> 'a option
    val add : inj:'a injection -> key -> '-> t -> t
    val find : inj:'a injection -> key -> t -> 'a
    val cardinal : t -> int
    val remove : key -> t -> t
    val mem : inj:'a injection -> key -> t -> bool
    val iter_keys : f:(key -> unit) -> t -> unit
    val fold_keys : f:('-> key -> 'a) -> x:'-> t -> 'a
    type 'a sequence = ('-> unit) -> unit
    val keys_seq : t -> key sequence
    val bindings_of : inj:'a injection -> t -> (key * 'a) sequence
    type value = Value : ('a injection -> 'a option) -> value
    val bindings : t -> (key * value) sequence
  end