На форуме projecteuler наибыстрейшие реализации на других языках по сути решето эратосфена используют, и предлагаемый там(хотя может на других страницах есть другие) код на хаскелле тоже его использует
module Main where
seive :: [Integer] -> [Integer] -> [Integer]
seive ps [] = reverse ps
seive ps (p:cs) =
seive (p:ps) (filter ((/= 0) . (`mod` p)) cs)
main = print . sum $ seive [] [2..1999999]
Я пока пришёл к выводу, что вариант
isPrime :: Integral a => a -> Bool
check n factor = if factor <= floor(sqrt(fromIntegral n)) then if n `mod` factor == 0 then False;
else check n (factor+2);
else True;
isPrime x | x == 2 = True
| x `mod` 2 == 0 = False
| otherwise = check x 3
primeSum i n sum = if i >= n then sum;
else if isPrime(i) then primeSum(i+1) n (sum+i);
else primeSum (i+1) n sum
Может дело просто в том. что не в ghci нужно запускать, и тогда хотя бы секунд за 30 посчитает?