Основной вопрос приходит вместе с цитатами из интерпретатора GHCI. Да, я знаю, что предполагаемое использование кода компилирует его в исполняемый файл, однако, поскольку я новичок в Haskell, GHCI кажется идеальным для изучения некоторого Haskell.
Когда я использую алгоритмы тяжелой вычислительной нагрузки, я иногда сталкиваюсь с сообщениями, подобными следующим:
Prelude Data.List> foldl' (+) 0 [1..2*10^8]
20000000100000000
it :: (Num b, Enum b) => b
(8.35 secs, 17,600,063,056 bytes)
В то же время у меня физически установлено только 8 ГБ ОЗУ.
Если использование памяти превышает определенный предел (который я не совсем уверен, сколько это, но предполагаю, что это вся память, которая может быть использована), исключение переполнения стека выдается, как показано ниже:
Prelude> foldl (+) 0 [1..5 * 10^7]
*** Exception: stack overflow
Тем не менее, как это возможно, что программа использует> 16 ГБ памяти, в то время как моя оперативная память составляет 8 ГБ и без исключения переполнения стека?