Como os compiladores Haskell decidem se alocam na pilha ou na pilha?

Haskell não possui gerenciamento explícito de memória e todos os objetos são passados por valor; portanto, também não há contagem de referência óbvia ou coleta de lixo. Como um compilador Haskell normalmente decide se deve gerar código que é alocado na pilha versus código que é alocado no heap para uma determinada variável? A pilha ou pilha consistentemente alocará as mesmas variáveis em diferentes sites de chamada para a mesma função? E quando é alocado, como decide quando liberar memória? As alocações e desalocações de pilha ainda são executadas no mesmo padrão de entrada / saída de função que em C?

questionAnswers(2)

yourAnswerToTheQuestion