This library provides a type class Memoizable
for memoizing
functions, along with instances for a variety of argument types.
It includes a Template Haskell function for deriving
Memoizable
instances for arbitrary algebraic datatypes.
The library constructs pure memo caches without the use of
unsafePerformIO
. This technique relies on implementation
assumptions—namely, call-by-need—that, while not guaranteed
by the semantics of Haskell, generally appear to hold.