object Test { def mkIterator = (1 to 5).iterator map (x => { println(x) ; x }) def mkInfinite = Iterator continually { println(1) ; 1 } def main(args: Array[String]): Unit = { // Stream is strict in its head so we should see 1 from each of them. val s1 = mkIterator.toStream val s2 = mkInfinite.toStream // back and forth without slipping into nontermination. println((Stream from 1).toIterator.drop(10).toStream.drop(10).toIterator.next) () } }