{-|
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.
-}{-# LANGUAGE BangPatterns #-}moduleData.StableMemo.Weak(memo,memo2,memo3)whereimportData.ProxyimportSystem.Mem.Weak(Weak)importqualifiedData.StableMemo.InternalasInternal-- | Memoize a unary function.memo::(a->b)->(a->b){-# NOINLINE memo #-}memo=Internal.memo(Proxy::ProxyWeak)-- | Curried memoization to share partial evaluationmemo2::(a->b->c)->(a->b->c)memo2f=memo.memof-- | Curried memoization to share partial evaluationmemo3::(a->b->c->d)->(a->b->c->d)memo3f=memo.memo2f