como resolver "estouro de espaço de pilha" em haskell

Executando o seguinte programa irá imprimir "estouro de espaço: tamanho atual 8388608 bytes." eu liisto eisto, mas ainda não sei como resolver meu problema. Eu estou usando o foldr, não deveria ser garantido que ele seja "recursivo na cauda"?

Eu me sinto ótimo sobre Haskell até agora, até que eu saiba que eu deveria evitar "estouro de espaço" ao usar a poderosa recursão. :)

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

EDIT: remover a definição deisPrime Pela simplicidade

questionAnswers(2)

yourAnswerToTheQuestion