Эта лямбда-функция возвращает 1:
(\x y -> 1) 1 p
где p = (\xy -> 1)
Хорошо, это имеет смысл для меня — лямбда-функция возвращает 1, независимо от его аргументы.
Теперь эта лямбда-функция генерирует ошибку (ошибка бесконечного типа):
(\x y -> x y x) p 1
Это не имеет для меня смысла. Если эта функция применяется к аргументам, вот результат замены x на p и y на 1:
p 1 p
Замените первое p его определением:
(\x y -> 1) 1 p
Эй! Это идентично приведенному выше, который вернул 1.
Вопрос: почему (\xy -> 1) 1 p завершается успешно, тогда как (\xy -> xyx) p 1 терпит неудачу?
/Roger