[Haskell-cafe] Re: Caching the Result of a Transaction?
jake.mcarthur at gmail.com
Mon Apr 28 23:58:54 EDT 2008
On Apr 28, 2008, at 10:01 PM, Ryan Ingram wrote:
> [...] if you have a :: TIVal a, and f :: a -> TIVal b, and you execute
> force (a >>= f)
> and the action returned by f executes retry for whatever reason, then
> the caching done in "a" gets undone.
Dangit, you're right. You just rained on the parade! Hmm...
Perhaps we could use the data structure Chris proposed and mix it with
my first approach involving forkIO. Another thread can perform the
caching in a separate transaction _or_ the main thread can perform the
caching itself in case the extra thread doesn't get a chance first.
This would ensure that it manages to get cached _sometime_ even when
the main transaction itself retries, but it loses some of the elegance
we had gained by not forking a new thread and still doesn't
_guarantee_ that the computations are run only once.
This is not ideal. :(
More information about the Haskell-Cafe