let iter f =
let old, l =
State.fold
(fun v elt (old, l) -> match v, old with
| v, None ->
assert (l = []);
Some v, [ elt ]
| v, (Some old as some) when VarinfoComparable.equal v old ->
some, elt :: l
| v, Some old ->
f old l;
Some v, [ elt ])
(None, [])
in
Extlib.may (fun v -> f v l) old