"An `Iterator` that returns the elements of two `Iterable`s, as if they were chained together." see (`function Iterable.chain`) by ("Enrique Zamudio") class ChainedIterator<out Element,out Other>({Element*} first, {Other*} second) satisfies Iterator<Element|Other> { variable Iterator<Element|Other> iter = first.iterator(); variable value more = true; shared actual Element|Other|Finished next() { variable Element|Other|Finished e = iter.next(); if (is Finished f=e) { if (more) { iter = second.iterator(); more = false; e = iter.next(); } } return e; } }