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