(.) f g = \x -> f (g x)
Function:
h = (f .) . g
Substitute outer:
h = \x -> (f .) (g x)
Substitute section:
h = \x -> (\y -> f . y) (g x)
Substitute inner:
h = \x -> (\y -> \z -> f (y z)) (g x)
Apply (g x) to the \y lambda:
h = \x -> \z -> f ((g x) z)
Float z to the outer lambda:
h = \x z -> f ((g x) z)
Eliminate superfluous parens:
h = \x z -> f (g x z)
Float lambda arguments out:
h x z = f (g x z)
KC4pIGYgZyA9IFx4IC0+IGYgKGcgeCkKCkZ1bmN0aW9uOgogICAgaCA9IChmIC4pIC4gZwpTdWJzdGl0dXRlIG91dGVyOgogICAgaCA9IFx4IC0+IChmIC4pIChnIHgpClN1YnN0aXR1dGUgc2VjdGlvbjoKICAgIGggPSBceCAtPiAoXHkgLT4gZiAuIHkpIChnIHgpClN1YnN0aXR1dGUgaW5uZXI6CiAgICBoID0gXHggLT4gKFx5IC0+IFx6IC0+IGYgKHkgeikpIChnIHgpCkFwcGx5IChnIHgpIHRvIHRoZSBceSBsYW1iZGE6CiAgICBoID0gXHggLT4gXHogLT4gZiAoKGcgeCkgeikKRmxvYXQgeiB0byB0aGUgb3V0ZXIgbGFtYmRhOgogICAgaCA9IFx4IHogLT4gZiAoKGcgeCkgeikKRWxpbWluYXRlIHN1cGVyZmx1b3VzIHBhcmVuczoKICAgIGggPSBceCB6IC0+IGYgKGcgeCB6KQpGbG9hdCBsYW1iZGEgYXJndW1lbnRzIG91dDoKICAgIGggeCB6ID0gZiAoZyB4IHopCg==