let count = gen() { var n = 0 loop { yield n n := n + 1 } } let powers = gen(m) { for n in count() { yield n ** m } } let filtered = gen(s1, s2) { var v = s1() var f = s2() loop { if v > f { f := s2() continue } else if v < f { yield v } v := s1() } } let squares = powers(2) let cubes = powers(3) let f = filtered(squares, cubes) // Drop first 20 items. for i in range(20) {f()} // Print next 10 items. for i in range(10) {print(f())}