sig
  type ('a, 'b) manual_cache = {
    get : '-> 'b;
    del : '-> unit;
    enum : unit -> ('a * 'b) BatEnum.t;
  }
  val make_ht :
    gen:('-> 'b) -> init_size:int -> ('a, 'b) BatCache.manual_cache
  val make_map : gen:('-> 'b) -> ('a, 'b) BatCache.manual_cache
  type ('a, 'b) auto_cache = '-> 'b
  val lru_cache : gen:('-> 'b) -> cap:int -> ('a, 'b) BatCache.auto_cache
end