static ItIt uniqueRecursiveIterator(Cl rootElements, IF1> getChildren) {
new Set set;
addAll(set, rootElements);
LinkedList queue = cloneAsLinkedList(set);
ret iff(func {
if (empty(queue))
ret endMarker();
A a = popFirst(queue);
addAllWithTesterSet(queue, set, getChildren.get(a));
ret a;
});
}