Рассмотрим эту функцию:
f as = if length as > 100 then length as else 100
Поскольку функция чиста, очевидно, что длина будет одинаковой для обоих вызовов. Мой вопрос: оптимизатор Haskell переводит код выше в эквивалент следующего?
f as =
let l = length as
in if l > 100 then l else 100
Если это так, то какой уровень настройки позволяет? Если это не так, то почему? В этом случае отходы памяти не могут быть причиной, описанной в этом ответе, поскольку введенная переменная освобождается после завершения выполнения функции.
Обратите внимание, что это не дубликат этого вопроса из-за локальной области видимости и, следовательно, может иметь принципиально иной ответ.