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