We have:
k x y = (f (g x)) (h y)
and we want to write kin a dotless style.
The first argument passed in kis x. What do we need to do with x? Well, first we need to call gon it, and then f, and then do something fantastic to apply it to (h y).
k = fancy . f . g
What is that fancy? Well:
k x y = (fancy . f . g) x y
= fancy (f (g x)) y
= f (g x) (h y)
, fancy z y = z (h y). Eta-reduction, fancy z = z . h, fancy = (. h).
k = (. h) . f . g
βββββ βββββ
x ββββ g ββββ g x ββββ β
/ βββββ β β
(x, y) β f ββββ f (g x) (h y)
\ βββββ β β
y ββββ h ββββ h y ββββ β
βββββ βββββ
ββββββββββββββββββββββββββββββββ
k
Control.Arrow:
k = curry ((g *** h) >>> uncurry f)