This module provides memo combinators with slightly different behavior from those in Data.StableMemo. The memo tables generated by these combinators use weak pointers to store the values, so they not only do not unnecessarily retain the arguments, but they also do not retain the function outputs. This can be useful for memoized functions that are expected to be around for a long time. If the result for an input has already been computed and happens to still be in the heap, it will be reused, otherwise it will be recomputed.
Curried memoization to share partial evaluation