`sig
type ('k, 'v) t
type ('a, 'b) memo = ('a, ('b, exn) Core.Std.Result.t) Cache.Lru.t
val find : ('k, 'v) Cache.Lru.t -> 'k -> 'v option
val add : ('k, 'v) Cache.Lru.t -> key:'k -> data:'v -> unit
val remove : ('k, 'a) Cache.Lru.t -> 'k -> unit
val clear : ('a, 'b) Cache.Lru.t -> unit
val create : destruct:('v -> unit) option -> int -> ('k, 'v) Cache.Lru.t
val call_with_cache :
cache:('a, 'b) Cache.Lru.memo -> ('a -> 'b) -> 'a -> 'b
val memoize :
?destruct:('b -> unit) ->
('a -> 'b) -> int -> ('a, 'b) Cache.Lru.memo * ('a -> 'b)
end`