sig
  type hash = int
  type 'a t = '-> CCHash.hash
  val const : CCHash.hash -> '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 : 'CCHash.t -> 'a list CCHash.t
  val array : 'CCHash.t -> 'a array CCHash.t
  val opt : 'CCHash.t -> 'a option CCHash.t
  val pair : 'CCHash.t -> 'CCHash.t -> ('a * 'b) CCHash.t
  val triple :
    'CCHash.t -> 'CCHash.t -> 'CCHash.t -> ('a * 'b * 'c) CCHash.t
  val quad :
    'CCHash.t ->
    'CCHash.t -> 'CCHash.t -> 'CCHash.t -> ('a * 'b * 'c * 'd) CCHash.t
  val if_ : bool -> 'CCHash.t -> 'CCHash.t -> 'CCHash.t
  val poly : 'CCHash.t
  val list_comm : 'CCHash.t -> 'a list CCHash.t
  val array_comm : 'CCHash.t -> 'a array CCHash.t
  val combine : 'CCHash.t -> CCHash.hash -> '-> 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 = ('-> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a klist = unit -> [ `Cons of 'a * 'CCHash.klist | `Nil ]
  val seq : 'CCHash.t -> 'CCHash.sequence CCHash.t
  val gen : 'CCHash.t -> 'CCHash.gen CCHash.t
  val klist : 'CCHash.t -> 'CCHash.klist CCHash.t
end