I'm hoping you are using ghc -O2 and not ghci, right? Your problem will be in the generation, not the summation.
One faster way is to use stream fusion-based sequences, which optimize better. With regular lists:
import Data.List
import qualified Data.Map as M
primes :: [Integer]
primes = mkPrimes 2 M.empty
where
mkPrimes n m = case (M.null m, M.findMin m) of
(False, (n', skips)) | n == n' ->
mkPrimes (succ n) (addSkips n (M.deleteMin m) skips)
_ -> n : mkPrimes (succ n) (addSkip n m n)
addSkip n m s = M.alter (Just . maybe [s] (s:)) (n+s) m
addSkips = foldl' . addSkip
-- fuse:
main = print (sum (takeWhile (<= 2000000) primes))
We get,
$ ghc -O2 --make A.hs
$ time ./A
142913828922
./A 9.99s user 0.17s system 99% cpu 10.166 total
Switching to streams, so sum . takeWhile fuses:
import qualified Data.List.Stream as S
main = print (S.sum (S.takeWhile (<= 2000000) primes))
Saves some small time,
$ time ./A
142913828922
./A 9.60s user 0.13s system 99% cpu 9.795 total
But your problem will be prime generation, as we can see if we discard the summation altogether, replacing sum with last:
$ time ./A
1999993
./A 9.65s user 0.12s system 99% cpu 9.768 total
So find a better prime generator. :-)
Finally, there's a library on Hackage for fast prime generators:
http://hackage.haskell.org/packages/archive/primes/0.1.1/doc/html/Data-Numbers-Primes.html
Using it, our time becomes:
$ cabal install primes
$ cabal install stream-fusion
$ cat A.hs
import qualified Data.List.Stream as S
import Data.Numbers.Primes
main = print . S.sum . S.takeWhile (<= 2000000) $ primes
$ ghc -O2 -fvia-C -optc-O3 A.hs --make
$ time ./A
142913828922
./A 0.62s user 0.07s system 99% cpu 0.694 total