sig
  type 'a equal = '-> '-> bool
  type 'a hash = '-> int
  type ('a, 'b) t
  val clear : ('a, 'b) CCCache.t -> unit
  type ('a, 'b) callback = in_cache:bool -> '-> '-> unit
  val with_cache :
    ?cb:('a, 'b) CCCache.callback ->
    ('a, 'b) CCCache.t -> ('-> 'b) -> '-> 'b
  val with_cache_rec :
    ?cb:('a, 'b) CCCache.callback ->
    ('a, 'b) CCCache.t -> (('-> 'b) -> '-> 'b) -> '-> 'b
  val size : ('a, 'b) CCCache.t -> int
  val iter : ('a, 'b) CCCache.t -> ('-> '-> unit) -> unit
  val dummy : ('a, 'b) CCCache.t
  val linear : ?eq:'CCCache.equal -> int -> ('a, 'b) CCCache.t
  val replacing :
    ?eq:'CCCache.equal ->
    ?hash:'CCCache.hash -> int -> ('a, 'b) CCCache.t
  val lru :
    ?eq:'CCCache.equal ->
    ?hash:'CCCache.hash -> int -> ('a, 'b) CCCache.t
  val unbounded :
    ?eq:'CCCache.equal ->
    ?hash:'CCCache.hash -> int -> ('a, 'b) CCCache.t
end