Memoize.ForOrderedType
ForOrderedType
is a special case of Make
where it suffices to pass an ordered type T
as an argument. A reference to a persistent map is used to hold the memoization table.
visibly_memoize
is a memoization combinator that exposes the memoization table. The function call visibly_memoize f
returns a pair of a memoized function f'
and a memoization table.
Cycle
is raised by defensive_fix
when a dependency cycle is detected.
defensive_fix
works like fix
, except it detects circular dependencies, which can arise if the second-order function supplied by the user does not follow a well-founded recursion pattern. When the user invokes f x
, where f
is the function returned by defensive_fix
, if a cyclic dependency is detected, then Cycle (zs, z)
is raised, where the list zs
begins with z
and continues with a series of intermediate keys, leading back to z
. Note that undetected divergence remains possible; this corresponds to an infinite dependency chain, without a cycle.
val curried : (((('a * 'b) -> 'c) -> ('a * 'b) -> 'c) -> ('a * 'b) -> 'c) -> (('a -> 'b -> 'c) -> 'a -> 'b -> 'c) -> 'a -> 'b -> 'c
curried
can be used to obtain a curried version of fix
or defensive_fix
in a concrete instance where the type key
is a product type.