Description
When executed, a function F can produce "push" onto accumulators, as described here.
When another function G reads the accumulated values, that is considered a read of F. So when we decide if G is red in a given revision, we will look to see if F is red. To do that, we will look at F's inputs, but then we'll compare F's output -- and here, we don't take into account accumulated values! This is a problem. This could cause us to fail to re-execute G even though the errors or other values pushed by F have changed.
I'm not entirely sure the best way to fix this! We can track the places that a function pushes during its execution easily enough, but I don't want to store all the values in the Memo
. This would be a lot easier to fix if we were using hashes to compare for equality instead of Eq
, and that'd be nice for some other reasons too, I wonder if that's the way to go...