Было это в самом-самом начале моего изучения функциональных языков. Читая SICP (русский перевод) я понял что такое замыкание
. Попробую это описать. Замыкание контекста - способность лямбда функции сохранять контекст, в котором она была определена. Это свойство лямбда функций можно использовать для хранения данных, т.е. некоторые данные можно хранить в виде функций. Извлекать эти данные можно с помощью других функций. Попробуем разобраться (на примере хранение пары):
first p = p (\a b -> a)
second p = p (\a b -> b)
Итак, определяем пару как лямбда функцию от одного аргумента (этим аргументом впоследствии будет другая функция), этот аргумент применяется к членам пары. Функция получения первого члена пары будет функцией одного аргумента, которая будет применять этот аргумент к лямбда функции двух аргументов
Функция получения второго члена пары определяется аналогично.
Теперь мы можем определить пару
И проверить как работают функции first и second
1
> second some_pair
2
Итак, много-много малопонятного текста на русском, и всего три простые строчки на Haskell’е