module CPS where sieve :: [Int] -> [Int] sieve (x:xs) = filter (\ y -> y `mod` x /= 0) xs primes :: [Int] primes = map head (iterate sieve [2..]) elem' n [] = False elem' n (x:xs) = if n Bool isprime n = elem' n primes prodprimes n = if n==1 then 1 else if isprime n then n*prodprimes(n-1) else prodprimes(n-1) isprime' n c = c (isprime n) prodprimes' n c = if n==1 then c 1 else isprime' n (\ b -> if b then prodprimes' (n-1) (\ p -> c (n*p)) else prodprimes' (n-1) c)