sig
  type key
  type 'a t
  val empty : 'CCHashTrie.S.t
  val is_empty : 'CCHashTrie.S.t -> bool
  val singleton : CCHashTrie.S.key -> '-> 'CCHashTrie.S.t
  val add : CCHashTrie.S.key -> '-> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val mem : CCHashTrie.S.key -> 'CCHashTrie.S.t -> bool
  val get : CCHashTrie.S.key -> 'CCHashTrie.S.t -> 'a option
  val get_exn : CCHashTrie.S.key -> 'CCHashTrie.S.t -> 'a
  val remove : CCHashTrie.S.key -> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val update :
    CCHashTrie.S.key ->
    f:('a option -> 'a option) -> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val add_mut :
    id:CCHashTrie.Transient.t ->
    CCHashTrie.S.key -> '-> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val remove_mut :
    id:CCHashTrie.Transient.t ->
    CCHashTrie.S.key -> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val update_mut :
    id:CCHashTrie.Transient.t ->
    CCHashTrie.S.key ->
    f:('a option -> 'a option) -> 'CCHashTrie.S.t -> 'CCHashTrie.S.t
  val cardinal : 'CCHashTrie.S.t -> int
  val choose : 'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) option
  val choose_exn : 'CCHashTrie.S.t -> CCHashTrie.S.key * 'a
  val iter : f:(CCHashTrie.S.key -> '-> unit) -> 'CCHashTrie.S.t -> unit
  val fold :
    f:('-> CCHashTrie.S.key -> '-> 'b) -> x:'-> 'CCHashTrie.S.t -> 'b
  val to_list : 'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) list
  val add_list :
    'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) list -> 'CCHashTrie.S.t
  val add_list_mut :
    id:CCHashTrie.Transient.t ->
    'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) list -> 'CCHashTrie.S.t
  val of_list : (CCHashTrie.S.key * 'a) list -> 'CCHashTrie.S.t
  val add_seq :
    'CCHashTrie.S.t ->
    (CCHashTrie.S.key * 'a) CCHashTrie.sequence -> 'CCHashTrie.S.t
  val add_seq_mut :
    id:CCHashTrie.Transient.t ->
    'CCHashTrie.S.t ->
    (CCHashTrie.S.key * 'a) CCHashTrie.sequence -> 'CCHashTrie.S.t
  val of_seq :
    (CCHashTrie.S.key * 'a) CCHashTrie.sequence -> 'CCHashTrie.S.t
  val to_seq :
    'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) CCHashTrie.sequence
  val add_gen :
    'CCHashTrie.S.t ->
    (CCHashTrie.S.key * 'a) CCHashTrie.gen -> 'CCHashTrie.S.t
  val add_gen_mut :
    id:CCHashTrie.Transient.t ->
    'CCHashTrie.S.t ->
    (CCHashTrie.S.key * 'a) CCHashTrie.gen -> 'CCHashTrie.S.t
  val of_gen : (CCHashTrie.S.key * 'a) CCHashTrie.gen -> 'CCHashTrie.S.t
  val to_gen : 'CCHashTrie.S.t -> (CCHashTrie.S.key * 'a) CCHashTrie.gen
  val print :
    CCHashTrie.S.key CCHashTrie.printer ->
    'CCHashTrie.printer -> 'CCHashTrie.S.t CCHashTrie.printer
  val as_tree :
    'CCHashTrie.S.t ->
    [ `L of int * (CCHashTrie.S.key * 'a) list | `N ] CCHashTrie.ktree
end