sig
  type 'a sequence = ('-> unit) -> unit
  type 'a gen = unit -> 'a option
  module Key :
    sig
      type 'a t
      val create : unit -> 'CCHet.Key.t
      val equal : 'CCHet.Key.t -> 'CCHet.Key.t -> bool
    end
  type pair = Pair : 'CCHet.Key.t * '-> CCHet.pair
  module Tbl :
    sig
      type t
      val create : ?size:int -> unit -> CCHet.Tbl.t
      val mem : CCHet.Tbl.t -> 'CCHet.Key.t -> bool
      val add : CCHet.Tbl.t -> 'CCHet.Key.t -> '-> unit
      val length : CCHet.Tbl.t -> int
      val find : CCHet.Tbl.t -> 'CCHet.Key.t -> 'a option
      val find_exn : CCHet.Tbl.t -> 'CCHet.Key.t -> 'a
      val iter : (CCHet.pair -> unit) -> CCHet.Tbl.t -> unit
      val to_seq : CCHet.Tbl.t -> CCHet.pair CCHet.sequence
      val of_seq : CCHet.pair CCHet.sequence -> CCHet.Tbl.t
      val add_seq : CCHet.Tbl.t -> CCHet.pair CCHet.sequence -> unit
      val add_list : CCHet.Tbl.t -> CCHet.pair list -> unit
      val of_list : CCHet.pair list -> CCHet.Tbl.t
      val to_list : CCHet.Tbl.t -> CCHet.pair list
    end
  module Map :
    sig
      type t
      val empty : CCHet.Map.t
      val mem : 'CCHet.Key.t -> CCHet.Map.t -> bool
      val add : 'CCHet.Key.t -> '-> CCHet.Map.t -> CCHet.Map.t
      val length : CCHet.Map.t -> int
      val cardinal : CCHet.Map.t -> int
      val find : 'CCHet.Key.t -> CCHet.Map.t -> 'a option
      val find_exn : 'CCHet.Key.t -> CCHet.Map.t -> 'a
      val iter : (CCHet.pair -> unit) -> CCHet.Map.t -> unit
      val to_seq : CCHet.Map.t -> CCHet.pair CCHet.sequence
      val of_seq : CCHet.pair CCHet.sequence -> CCHet.Map.t
      val add_seq : CCHet.Map.t -> CCHet.pair CCHet.sequence -> CCHet.Map.t
      val add_list : CCHet.Map.t -> CCHet.pair list -> CCHet.Map.t
      val of_list : CCHet.pair list -> CCHet.Map.t
      val to_list : CCHet.Map.t -> CCHet.pair list
    end
end