static > ItIt nestedIterator(final Iterator it1, final F1 makeInnerIterator) { if (!it1.hasNext()) ret emptyIterator(); ret iff(new F0() { A a; Iterator innerIterator; void nextOuter { a = it1.next(); innerIterator = callF(makeInnerIterator, a); } *() { nextOuter(); } C get() { while licensed { if (innerIterator.hasNext()) ret innerIterator.next(); if (!it1.hasNext()) ret endMarker(); nextOuter(); } } }); }