sig
  type t = int
  type state
  type 'a hash_fun = '-> CCHash.state -> CCHash.state
  val init : CCHash.state
  val finish : CCHash.state -> int
  val apply : 'CCHash.hash_fun -> '-> int
  val bool_ : bool CCHash.hash_fun
  val char_ : char CCHash.hash_fun
  val int_ : int CCHash.hash_fun
  val string_ : string CCHash.hash_fun
  val int32_ : int32 CCHash.hash_fun
  val int64_ : int64 CCHash.hash_fun
  val nativeint_ : nativeint CCHash.hash_fun
  val list_ : 'CCHash.hash_fun -> 'a list CCHash.hash_fun
  val array_ : 'CCHash.hash_fun -> 'a array CCHash.hash_fun
  type 'a sequence = ('-> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a klist = unit -> [ `Cons of 'a * 'CCHash.klist | `Nil ]
  module type HASH =
    sig
      type state
      val int : int -> CCHash.HASH.state -> CCHash.HASH.state
      val bool : bool -> CCHash.HASH.state -> CCHash.HASH.state
      val char : char -> CCHash.HASH.state -> CCHash.HASH.state
      val int32 : int32 -> CCHash.HASH.state -> CCHash.HASH.state
      val int64 : int64 -> CCHash.HASH.state -> CCHash.HASH.state
      val nativeint : nativeint -> CCHash.HASH.state -> CCHash.HASH.state
      val slice :
        string -> int -> int -> CCHash.HASH.state -> CCHash.HASH.state
    end
  module type S =
    sig
      type state
      val int : int -> state -> state
      val bool : bool -> state -> state
      val char : char -> state -> state
      val int32 : int32 -> state -> state
      val int64 : int64 -> state -> state
      val nativeint : nativeint -> state -> state
      val slice : string -> int -> int -> state -> state
      type 'a hash_fun = '-> CCHash.state -> CCHash.state
      val string : string CCHash.S.hash_fun
      val list : 'CCHash.S.hash_fun -> 'a list CCHash.S.hash_fun
      val array : 'CCHash.S.hash_fun -> 'a array CCHash.S.hash_fun
      val opt : 'CCHash.S.hash_fun -> 'a option CCHash.S.hash_fun
      val pair :
        'CCHash.S.hash_fun ->
        'CCHash.S.hash_fun -> ('a * 'b) CCHash.S.hash_fun
      val triple :
        'CCHash.S.hash_fun ->
        'CCHash.S.hash_fun ->
        'CCHash.S.hash_fun -> ('a * 'b * 'c) CCHash.S.hash_fun
      val if_ :
        bool ->
        'CCHash.S.hash_fun -> 'CCHash.S.hash_fun -> 'CCHash.S.hash_fun
      val seq : 'CCHash.S.hash_fun -> 'CCHash.sequence CCHash.S.hash_fun
      val gen : 'CCHash.S.hash_fun -> 'CCHash.gen CCHash.S.hash_fun
      val klist : 'CCHash.S.hash_fun -> 'CCHash.klist CCHash.S.hash_fun
    end
  module Make :
    functor (H : HASH->
      sig
        type state = H.state
        val int : int -> state -> state
        val bool : bool -> state -> state
        val char : char -> state -> state
        val int32 : int32 -> state -> state
        val int64 : int64 -> state -> state
        val nativeint : nativeint -> state -> state
        val slice : string -> int -> int -> state -> state
        type 'a hash_fun = '-> state -> state
        val string : string hash_fun
        val list : 'a hash_fun -> 'a list hash_fun
        val array : 'a hash_fun -> 'a array hash_fun
        val opt : 'a hash_fun -> 'a option hash_fun
        val pair : 'a hash_fun -> 'b hash_fun -> ('a * 'b) hash_fun
        val triple :
          'a hash_fun ->
          'b hash_fun -> 'c hash_fun -> ('a * 'b * 'c) hash_fun
        val if_ : bool -> 'a hash_fun -> 'a hash_fun -> 'a hash_fun
        val seq : 'a hash_fun -> 'a sequence hash_fun
        val gen : 'a hash_fun -> 'a gen hash_fun
        val klist : 'a hash_fun -> 'a klist hash_fun
      end
  val int : int -> state -> state
  val bool : bool -> state -> state
  val char : char -> state -> state
  val int32 : int32 -> state -> state
  val int64 : int64 -> state -> state
  val nativeint : nativeint -> state -> state
  val slice : string -> int -> int -> state -> state
  val string : string hash_fun
  val list : 'a hash_fun -> 'a list hash_fun
  val array : 'a hash_fun -> 'a array hash_fun
  val opt : 'CCHash.hash_fun -> 'a option CCHash.hash_fun
  val pair :
    'CCHash.hash_fun -> 'CCHash.hash_fun -> ('a * 'b) CCHash.hash_fun
  val triple :
    'CCHash.hash_fun ->
    'CCHash.hash_fun ->
    'CCHash.hash_fun -> ('a * 'b * 'c) CCHash.hash_fun
  val if_ :
    bool -> 'CCHash.hash_fun -> 'CCHash.hash_fun -> 'CCHash.hash_fun
  val seq : 'CCHash.hash_fun -> 'CCHash.sequence CCHash.hash_fun
  val gen : 'CCHash.hash_fun -> 'CCHash.gen CCHash.hash_fun
  val klist : 'CCHash.hash_fun -> 'CCHash.klist CCHash.hash_fun
end