Компиляция Haskell с -O2 значительно увеличивает использование памяти
Эта простая программа выполняется в постоянном пространстве памяти при компиляции без флагов с помощью 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]
При компиляции с ghc -O2 использование памяти превышает системные ресурсы (8 ГБ).
Изменение основного на:
main = do putStrLn $ show $ foldl' (+) 0 [g 0, g 1]
облегчает проблему, так что, похоже, что-то связано с картой.
Может кто-нибудь объяснить поведение и, возможно, как обойти это?
Версия GHC: Glasgow Haskell Compiler, версия 7.4.1, этап 2, загруженный GHC версии 7.4.1