module Example8 where import Prelude hiding (take) from n = n : from (n + 1) take 0 _ = [] take n [] | n > 0 = [] take n (x:xs) | n > 0 = x : take (n-1) xs sieve :: [Integer] -> [Integer] sieve (x:xs) = x : sieve [x' | x' <- xs, x' `mod` x /= 0] primes :: [Integer] primes = sieve (from 2) first20Primes = take 20 primes prime500 = primes !! 500