fun Sequence.cacheResult(): Sequence = CachedSequence(this) internal class CachedSequence(private val sequence: Sequence) : Sequence { private val cacheList by lazy { sequence.toList() } override fun iterator() = object : Iterator { private val iterator by lazy { cacheList.iterator() } override fun hasNext() = iterator.hasNext() override fun next() = iterator.next() } }