Я не понимаю, как компиляторы FP быстро делают код, связанный с неизменяемыми структурами данных, а не взрывают стек и т.д.
Например, вставьте операцию в дерево, она должна скопировать все дерево перед добавлением нового node и вернуть скопированное дерево по сравнению с императивным couterpart, которому нужно только добавить указатель на новый node. Если операция вставки выполняется в миллионы раз, это потребует загрузки памяти, и копирование будет медленнее и медленнее, когда дерево будет больше. Как оптимизаторы FP оптимизируют это?