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