-- sieve.hs — lazy sieve of Eratosthenes. -- -- Each recursive call to `sieve` consumes one prime `p` off the front -- of the input stream and produces an infinite stream of composites -- filtered out via `filter`. Because cons is lazy, only as much of -- the stream is forced as demanded by `take`. sieve (p:xs) = p : sieve (filter (\x -> x `mod` p /= 0) xs) sieve [] = [] primes = sieve [2..] result = take 10 primes