Суммирование большого списка чисел происходит слишком медленно

Задача: "Суммируйте первые 15 000 000 четных чисел. "

Haskell:

nats = [1..] :: [Int]
evens = filter even nats :: [Int]

MySum:: Int
MySum= sum $ take 15000000 evens

...ноMySum занимает много времени. Точнее, примерно в 10-20 раз медленнее, чем C / C ++.

Много раз ямы обнаружили, что решение на Haskell, закодированное естественным образом, примерно в 10 раз медленнее, чем C. Я ожидал, что GHC был очень аккуратно оптимизирующим компилятором и такой задачей, как этакажется, что это сложно.

Таким образом, можно ожидать, что примерно в 1,5-2 раза медленнее, чем C. В чем проблема?

Это может быть решено лучше?

Это код C, который ям, сравнивая это с:

long long sum = 0;
int n = 0, i = 1;

for (;;) {

  if (i % 2 == 0) {
    sum += i;
    n++;
  }

  if (n == 15000000)
    break;

  i++;
}

Редактировать 1Я действительно знаю, что это может быть вычислено в O (1). Пожалуйста, сопротивляйся.

Редактировать 2: Я действительно знаю, что вечера[2,4..] но функцияeven может быть что-то ещеO(1) и должны быть реализованы как функция.

Ответы на вопрос(7)

Ваш ответ на вопрос