Я заметил, что руководство GHC говорит: «Для саморекурсивной функции прерывателем цикла может быть только сама функция, поэтому INLINE прагма всегда игнорируется».
Разве это не говорит о каждом применении общих рекурсивных функциональных конструкций, таких как map
, zip
, scan*
, fold*
, sum
и т. д. не могут быть встроены?
Вы всегда можете переписать все эти функции, когда будете их использовать, добавив соответствующие теги строгости или, может быть, применив причудливые методы, такие как «слияние потоков», рекомендуемое здесь.
Тем не менее, разве все это не сильно ограничивает нашу способность писать код, который будет одновременно быстрым и элегантным?