Я читаю Получите Программирование на Haskell , чтобы получить представление о функциональном программировании. В уроке 10 автор обсуждает использование функционального программирования для создания простых объектов с использованием замыканий. До этого момента в книге темы включали функции высшего порядка, лямбда-функции и замыкания.
Он описывает что-то вроде:
simpleObject intAttribute= \message -> message intAttribute
simpleObject возвращает замыкание, которое в действительности хранит атрибут intAttribute. Закрытие принимает функцию в качестве аргумента и предоставляет intAttribute в качестве параметра. Например (мой):
obj = simpleObject 5
doubleIt x = 2 * x
obj doubleIt (returns 10)
Мне кажется, я достаточно ясно до этого момента.
Затем автор описывает метод доступа, похожий на:
getAttribute y = y (\x -> x)
getAtrribute obj (returns 5)
Код работает, как и ожидалось, возвращая захваченный intAttribute. Это где я заблудился. Как работает код getAttribute?