val from2 = Stream.iterate(2: BigInt)(_+1) def sieve(xs: Stream[BigInt]): Stream[BigInt] = { val x = xs.head xs.tail.filter((y: BigInt) => y % x != 0) } val primes = { val seqs = Stream.iterate(from2)(sieve) seqs.map(_.head) } // try // primes.take(100).toList