Let_syntax module to Incremental_intf.S. We've found things like this useful in a couple of different projects as a nice alternative to the mapN functions.Made it possible to use Incremental without invalidation -- i.e. a change in a the left-hand side of bind does not invalidate nodes created on the right-hand side.
This is configurable via the argument to Incremental.Make_with_config, which now takes:
val bind_lhs_change_should_invalidate_rhs : boolSo, one can now build an Incremental without invalidation using:
Incremental.Make_with_config (struct
include Incremental.Config.Default ()
let bind_lhs_change_should_invalidate_rhs = false
end) ()The implementation is simple: When a bind rhs changes, instead of invalidate_nodes_created_on_rhs, we rescope_nodes_created_on_rhs, which moves the nodes up to the bind's parent.
Turned the unit tests into a functor parameterized on bind_lhs_change_should_invalidate_rhs, and run them with both true and false. Modified tests where necessary to skip tests of invalidity when bind_lhs_change_should_invalidate_rhs = false.
Added a unit test of bind_lhs_change_should_invalidate_rhs = true that makes sure a node created on a bind rhs whose lhs subsequently changes continues to stabilize correctly.