Module type Fix.MEMOIZER

type key
val memoize : (key -> 'a) -> key -> 'a
type 'a t
val visibly_memoize : (key -> 'a) -> (key -> 'a) * 'a t
val fix : ((key -> 'a) -> key -> 'a) -> key -> 'a
exception Cycle of key list * key
val defensive_fix : ((key -> 'a) -> key -> 'a) -> key -> 'a
val curried : (((('a * 'b) -> 'c) -> ('a * 'b) -> 'c) -> ('a * 'b) -> 'c) -> (('a -> 'b -> 'c) -> 'a -> 'b -> 'c) -> 'a -> 'b -> 'c