double x = x + x from n = n : from (n+1) mytake n [] = [] mytake n (x:xs) = if n==0 then [] else x:mytake (n-1) xs myiterate f a = a : myiterate f (f a) sieve (p:xs) = filter (\ x -> (x `mod` p) /= 0) xs primes = map head (myiterate sieve (from 2))