// WITH_STDLIB interface Stream { fun iterator(): Iterator } class ZippingStream(val stream1: Stream, val stream2: Stream) : Stream> { override fun iterator(): Iterator> = object : AbstractIterator>() { val iterator1 = stream1.iterator() val iterator2 = stream2.iterator() override fun computeNext() { if (iterator1.hasNext() && iterator2.hasNext()) { setNext(iterator1.next() to iterator2.next()) } else { done() } } } } object EmptyStream : Stream { override fun iterator() = listOf().iterator() } fun box(): String { ZippingStream(EmptyStream, EmptyStream).iterator().hasNext() return "OK" }