Вторая функция будет вычислять сумму дважды - здесь не требуется явное совместное использование, а Haskell не выполняет запоминание (источник: Когда автоматическое запоминание в GHC Haskell? )
let
позволяет рассчитать сумму один раз и использовать в нескольких местах, поэтому первая функция будет немного быстрее.
РЕДАКТИРОВАТЬ:
Кто-то вв комментариях упоминается CSE (исключение общих подвыражений) как возможная оптимизация, которая может произойти здесьЯ попытался скомпилировать вашу функцию с помощью -ddump-cse
, чтобы выяснить, произойдет ли это, но хотя я не нашел упоминаний о normalSum
, вывод был слишком загадочным для меня.Однако мой ответ должен быть верным, если вы строите свою функцию без флага -O*
.Я обновлю свой ответ, если найду больше информации об этом.