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; }); }