Desempenho básico de I / O em Haskell

Outra micro-referência: Por que esse "loop" (compilado comghc -O2 -fllvm, 7.4.1, kernel Linux 64bit 3.2, redirecionado para/dev/null)

mapM_ print [1..100000000]

cerca de 5 vezes mais lento que um simples ciclo a foraC comwrite(2) syscall sem buffer? Estou tentando reunir as pegadinhas de Haskell.

Mesmo esta solução C lenta é muito mais rápida que a Haskell

int i;
char buf[16];
for (i=0; i<=100000000; i++) {
    sprintf(buf, "%d\n", i);
    write(1, buf, strlen(buf));
}

questionAnswers(3)

yourAnswerToTheQuestion