fun Sequence.repeat() = object : Iterator { var iterator = this@repeat.iterator() override fun next(): T { val result = iterator.next() if (!iterator.hasNext()) { iterator = this@repeat.iterator() } return result } override fun hasNext() = iterator.hasNext() }.asSequence() fun main(args: Array) { sequenceOf(1, 2, 3).repeat().take(6).forEach { println(it) } }