sig
  type hash = int
  type 'a t = 'a -> CCHash.hash
  val const : CCHash.hash -> 'a CCHash.t
  val int : int CCHash.t
  val bool : bool CCHash.t
  val char : char CCHash.t
  val int32 : int32 CCHash.t
  val int64 : int64 CCHash.t
  val nativeint : nativeint CCHash.t
  val slice : string -> int -> int CCHash.t
  val string : string CCHash.t
  val list : 'a CCHash.t -> 'a list CCHash.t
  val array : 'a CCHash.t -> 'a array CCHash.t
  val opt : 'a CCHash.t -> 'a option CCHash.t
  val pair : 'a CCHash.t -> 'b CCHash.t -> ('a * 'b) CCHash.t
  val triple :
    'a CCHash.t -> 'b CCHash.t -> 'c CCHash.t -> ('a * 'b * 'c) CCHash.t
  val quad :
    'a CCHash.t ->
    'b CCHash.t -> 'c CCHash.t -> 'd CCHash.t -> ('a * 'b * 'c * 'd) CCHash.t
  val if_ : bool -> 'a CCHash.t -> 'a CCHash.t -> 'a CCHash.t
  val poly : 'a CCHash.t
  val list_comm : 'a CCHash.t -> 'a list CCHash.t
  val array_comm : 'a CCHash.t -> 'a array CCHash.t
  val combine : 'a CCHash.t -> CCHash.hash -> 'a -> CCHash.hash
  val combine2 : CCHash.hash -> CCHash.hash -> CCHash.hash
  val combine3 : CCHash.hash -> CCHash.hash -> CCHash.hash -> CCHash.hash
  val combine4 :
    CCHash.hash -> CCHash.hash -> CCHash.hash -> CCHash.hash -> CCHash.hash
  type 'a sequence = ('a -> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a klist = unit -> [ `Cons of 'a * 'a CCHash.klist | `Nil ]
  val seq : 'a CCHash.t -> 'a CCHash.sequence CCHash.t
  val gen : 'a CCHash.t -> 'a CCHash.gen CCHash.t
  val klist : 'a CCHash.t -> 'a CCHash.klist CCHash.t
end