Обычно (?)
(где ?
обозначает произвольный инфиксный оператор) совпадает с \x y -> x ? y
.Таким образом, мы можем переписать f
как:
f = (\a b -> a . b) (\c d -> c . d)
Теперь, если мы применим аргумент к функции, мы получим:
f = (\b -> (\c d -> c . d) . b)
Теперь b
это просто аргумент f
, поэтому мы можем переписать это следующим образом:
f b = (\c d -> c . d) . b
Определение .
равно f . g = \x -> f (g x)
.Если заменить внешний .
его определением, мы получим:
f b = \x -> (\c d -> c . d) (b x)
Снова мы можем превратить x
в обычный параметр:
f b x = (\c d -> c . d) (b x)
Теперь давайте заменим другой .
:
f b x = (\c d y -> c (d y)) (b x)
Теперь давайте применим аргумент:
f b x = \d y -> (b x) (d y)
Теперь давайте снова переместим параметры:
f b x d y = (b x) (d y)
Готово.