let forward_fold_nfa (f : state -> 'a -> 'a)
(nfa : nfa)
(s : state)
(acc : 'a) : 'a =
let visited = Hashset.create (size nfa.q) in
let rec walk acc q =
if mem visited q then
acc
else
begin
add visited q;
let acc = f q acc in
List.fold_left walk acc (neighbors nfa q)
end
in
walk acc s