Ну, вот соответствующая статья в Википедии , для чего это стоит.
Краткая версия состоит в том, что такие определения исключают тело лямбда-выражения, используя заполнитель, такой как «M», и поэтому должны дополнительно указывать, что переменная, связанная с этим лямбда-выражением, не используется во всем, что представляет собой заполнитель.
Таким образом, «свободная переменная» здесь приблизительно означает переменную, определенную в некоторой неоднозначной или неизвестной внешней области видимости - например, в выражении типа \y -> x + y
, x
является свободной переменной, но y
- нет.
Eta сокращение - это удаление лишнего слоя связывания и немедленное применение переменной, которая (как вы, вероятно, предположите) действительна, только если рассматриваемая переменная используется только в этом одном месте.