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