primes :: Int -> [Int] primes k = eratosthenes [2..k] eratosthenes :: [Int] -> [Int] eratosthenes [] = [] eratosthenes (x:l) = x:eratosthenes (filter (\y -> (y `mod` x) /= 0) l)