La compilación de Haskell con -O2 aumenta drásticamente el uso de memoria
Este sencillo programa se ejecuta en un espacio de memoria constante cuando se compila sin marcas con ghc:
import Data.List
f x = x*x
g a = foldl' (+) (f a) [1..(1073741824-1)]
main = do putStrLn $ show $ foldl' (+) 0 $ map g [0,1]
Cuando se compila con ghc -O2, el uso de la memoria excede los recursos del sistema (8GB).
Cambio de principal a:
main = do putStrLn $ show $ foldl' (+) 0 [g 0, g 1]
alivia el problema, por lo que parece tener algo que ver con el mapa.
¿Alguien puede explicar el comportamiento y tal vez cómo solucionarlo?
La versión de GHC es: Glasgow Haskell Compiler, Versión 7.4.1, etapa 2 arrancada por la versión de GHC 7.4.1