@@ -159,13 +159,13 @@ isDirty me = any (\(_,dep) -> resultBuilt me < resultChanged dep)
159
159
refreshDeps :: KeySet -> Database -> Stack -> Key -> Result -> [KeySet ] -> AIO Result
160
160
refreshDeps visited db stack key result = \ case
161
161
-- no more deps to refresh
162
- [] -> compute db stack key RunDependenciesSame (Just result)
162
+ [] -> compute' db stack key RunDependenciesSame (Just result)
163
163
(dep: deps) -> do
164
164
let newVisited = dep <> visited
165
165
res <- builder db stack (toListKeySet (dep `differenceKeySet` visited))
166
166
if isDirty result res
167
167
-- restart the computation if any of the deps are dirty
168
- then compute db stack key RunDependenciesChanged (Just result)
168
+ then compute' db stack key RunDependenciesChanged (Just result)
169
169
-- else kick the rest of the deps
170
170
else refreshDeps newVisited db stack key result deps
171
171
@@ -176,10 +176,12 @@ refresh :: Database -> Stack -> Key -> Maybe Result -> AIO Result
176
176
refresh db stack key result = case (addStack key stack, result) of
177
177
(Left e, _) -> throw e
178
178
(Right stack, Just me@ Result {resultDeps = ResultDeps deps}) -> refreshDeps mempty db stack key me (reverse deps)
179
- (Right stack, _) -> compute db stack key RunDependenciesChanged result
179
+ (Right stack, _) -> compute' db stack key RunDependenciesChanged result
180
180
181
+ compute' :: Database -> Stack -> Key -> RunMode -> Maybe Result -> AIO Result
182
+ compute' db stack key mode result = liftIO $ compute db stack key mode result
181
183
-- | Compute a key.
182
- compute :: Database -> Stack -> Key -> RunMode -> Maybe Result -> AIO Result
184
+ compute :: Database -> Stack -> Key -> RunMode -> Maybe Result -> IO Result
183
185
-- compute _ st k _ _ | traceShow ("compute", st, k) False = undefined
184
186
compute db@ Database {.. } stack key mode result = do
185
187
let act = runRule databaseRules key (fmap resultData result) mode
0 commit comments