Commit 2c8d42f3 authored by dias@eecs.tufts.edu's avatar dias@eecs.tufts.edu
Browse files

Comment explaining use of seq in DFMonad

parent 1d34bd56
......@@ -192,6 +192,10 @@ instance Monad m => Monad (DFM' m f) where
DFM' f >>= k = DFM' (\l s -> do (a, s') <- f l s
s' `seq` case k a of DFM' f' -> f' l s')
return a = DFM' (\_ s -> return (a, s))
-- The `seq` is essential to ensure that entire passes of the dataflow engine
-- aren't postponed in a thunk. By making the sequence strict in the state,
-- we ensure that each action in the monad is executed immediately, preventing
-- stack overflows that previously occurred when finally forcing the old state thunks.
instance FuelUsingMonad (DFM' FuelMonad f) where
fuelRemaining = liftToDFM' fuelRemaining
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment