Project Euler Problem 10

http://projecteuler.net/index.php?section=problems&id=10
200万以下の素数の和

main = print $ foldl1 (+) (primeList 1 2000000)

primeList :: Integer -> Integer -> [Integer]
primeList n max = let x = nextPrime n
                  in if x > max then [] else [x] ++ (primeList x max)

--以下Problem 7から
nextPrime :: Integer -> Integer
nextPrime n = if n < 2 then 2 else head $ filter (\n -> isPrime n) [x | x <- [n+1..], odd x]

isPrime :: Integer -> Bool
isPrime 1 = False
isPrime n = null [x | x <- [2..floor $ sqrt $ fromInteger n], n `mod` x == 0]