primes = sieve [2..] sieve (p : xs) = p : sieve [x | x <- xs, (mod x p) > 0] isCoPrime (psh : pst) n | (psh * psh) > n = True | (mod n psh) == 0 = False | otherwise = (isCoPrime pst n) fastPrimes = 2 : [x | x <- [3,5 ..], (isCoPrime fastPrimes x)]