Функционально-императивный гибрид

Чистые функциональные языки программирования не допускают изменяемых данных, но некоторые вычисления более естественно / интуитивно выражаются императивным способом - или императивная версия алгоритма может быть более эффективной. Я знаю, что большинство функциональных языков не являются чистыми и позволяют вам назначать / переназначать переменные и делать императивные вещи, но в целом препятствуют этому.

Мой вопрос: почему не разрешить манипулировать локальным состоянием в локальных переменных, но требовать, чтобы функции может получить доступ только к своим локальным и глобальным константам (или только к константам, определенным во внешней области видимости)? Таким образом, все функции сохраняют ссылочную прозрачность (они всегда дают одно и то же возвращаемое значение при одних и тех же аргументах), но внутри функции вычисление может быть выражено в императивных терминах (например, в цикле while).

IO и это все еще может быть выполнено обычными функциональными способами - через монады или передачу токена «мира» или «вселенной».

8
задан Richard JP Le Guen 14 March 2013 в 03:02
поделиться