    class CycledIterator<Element>
                    ({Element*} iterable, Integer times)
            satisfies Iterator<Element> {

        variable Iterator<Element> iter = emptyIterator;
        variable Integer count=0;

        shared actual Element|Finished next() {
            if (!is Finished next = iter.next()) {
                return next;
            }
            else {
                if (count<times) {
                    count++;
                    iter = iterable.iterator();
                }
                else {
                    iter = emptyIterator;
                }
                return iter.next();
            }

        }

        string => "``iterable``.repeat(``times``).iterator()";

    }