Набралось уже несколько примеров кода, компилируемых/интерпретируемых по разному - к примеру hugs будет пытаться найти last [1..] итеративно практически не расходуя память, а ghc с любой оптимизацией или без нее - рекурсивно, съедая 1 гб памяти секунд за 5. Другой пример ghc переделывал в итерацию с -O0, но оставлял рекурсию с -O1 и -O2 (если надо могу выложить код).
Хотелось бы узнать, из каких соображений ghc оставляет рекурсию, и какие опции на это влияют (копание по документации успехом не окончилось), т.к. я подумываю, стоит ли реализовывать BSP деревья сложных моделей на нем.