Czy optymalizator Haskell wykorzystuje pamięć do powtarzania wywołań funkcji w zakresie?

Rozważ tę funkcję:

f as = if length as > 100 then length as else 100

Ponieważ funkcja jest czysta, oczywiste jest, że długość będzie taka sama w obu połączeniach. Moje pytanie brzmi: czy optymalizator Haskell zmienia powyższy kod na równoważny z poniższym?

f as = 
  let l = length as
  in if l > 100 then l else 100

Jeśli tak, to które ustawienie poziomu to umożliwia? Jeśli nie, to dlaczego? W tym scenariuszu marnotrawstwo pamięci nie może być powodem, jak wyjaśniono wta odpowiedź, ponieważ wprowadzona zmienna zostanie zwolniona po zakończeniu wykonywania funkcji.

Pamiętaj, że nie jest to duplikatto pytanie ze względu na zasięg lokalny, a zatem może uzyskać radykalnie inną odpowiedź.

questionAnswers(3)

yourAnswerToTheQuestion