mirror of
https://github.com/facebook/Haxl.git
synced 2024-10-04 06:07:32 +03:00
70f5bad436
Summary: Here I try to populate the writes done as part of a Haxl computation in an IORef inside the Environment. `IVar` which is the synchornisation point, also acts as the point where we store intermediate writes for Haxl computations, so they can be memoized and reused whenever a memoized computation is done again. This is done inside `getIVarWithWrites` function. This works, because we create new IVars when running a memo computation or a data fetch, and it is only at these places where we need to create a new environment with empty writes to run the computation in. So I run every memoized computation in a new environment (with empty writes) and populate the writes in this new environment. At the end of the memoized computation, I look up these writes from the `IVar` and also add them to the original environment. This way ultimately all writes are correctly propagated upwards to the top level environment user passes to `runHaxl`. This logic lives inside `execMemoNow`. Reviewed By: simonmar Differential Revision: D14342181 fbshipit-source-id: a410dae1a477f27b480804b67b2212e7500997ab
6 lines
221 B
Plaintext
6 lines
221 B
Plaintext
loadCache :: GenHaxl u w ()
|
|
loadCache = do
|
|
cacheRequest (CountAardvarks "yyy") (except (LogicError (NotFound "yyy")))
|
|
cacheRequest (CountAardvarks "xxx") (Right (3))
|
|
cacheRequest (ListWombats 100) (Right ([1,2,3]))
|