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 that, while not guaranteed by the semantics of
Haskell, appear to be true.