static ItIt itIt(ItIt it) {
if (it == null) ret emptyItIt();
ret it;
}
static ItIt itIt(Iterator it) {
if (it == null) ret emptyItIt();
if (it cast ItIt) ret it;
ret new IterableIterator {
public bool hasNext() { ret it.hasNext(); }
public A next() { ret it.next(); }
};
}
static ItIt itIt(Iterable l) {
if (l == null) ret emptyItIt();
if (l cast ItIt) ret l;
Iterator it = l.iterator();
if (it cast ItIt) ret it;
ret new IterableIterator {
public bool hasNext() { ret it.hasNext(); }
public A next() { ret it.next(); }
};
}