sig
  type 'a lru = 'Lru.lru
  val create : int -> ('-> unit) -> 'a lru
  val touch : 'a lru -> '-> unit
  val clear : 'a lru -> unit
  val size : 'a lru -> int
  val change_size : 'a lru -> int -> unit
  val in_cache : '-> 'a lru -> bool
  val memoize :
    ?destruct:('-> unit) -> int -> ('-> 'a) -> 'b lru * ('-> 'a)
end