Не уверен, что именно для Google для этого вопроса, поэтому я отправлю его непосредственно в SO:
- Переменные в Haskell неизменяемы.
- Чистые функции должны приводить к одинаковым значениям для одних и тех же аргументов
Из этих двух точек можно сделать вывод, что если вы дважды вызываете somePureFunc somevar1 somevar2
в свой код, имеет смысл вычислить значение во время первого вызова. Результирующее значение может быть сохранено в виде гигантской хеш-таблицы (или что-то в этом роде) и посмотрело вверх во время последующих вызовов функции. У меня есть два вопроса:
- Действительно ли GHC делает такую оптимизацию?
- Если это так, то каково поведение в случае, когда на самом деле дешевле повторять вычисление, чем искать результаты?
Спасибо.