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