как решить «переполнение стека пространства» в haskell
При запуске следующей программы будет напечатано «переполнение пространства: текущий размер 8388608 байт». я прочиталэто а такжеэто, но до сих пор не знаю, как решить мою проблему. Я использую Foldr, разве он не должен быть "рекурсивным хвостом"?
Я до сих пор чувствую себя прекрасно в Haskell, пока не узнаю, что должен предотвращать «переполнение пространства» при использовании рекурсии powerf, ul. :)
module Main where
import Data.List
value a b =
let l = length $ takeWhile (isPrime) $ map (\n->n^2 + a * n + b) [0..]
in (l, a ,b)
euler27 = let tuple_list = [value a b | a <-[-999..999] , b <- [-999..999]]
in foldr (\(n,a,b) (max,v) -> if n > max then (n , a * b) else (max ,v) ) (0,0) tuple_list
main = print euler27
РЕДАКТИРОВАТЬ: удалить определениеisPrime
для простоты