Is there a shorter way to express this haskell idiom?
I think eta-reduction is severely overrated. I see a lot more attempts at eta-reduction in the wild than I think is reasonable.

So it is in this case: eta-reducing this function is not helpful, I think. It's much more readable and elegant in its full form:

f :: (a -&gt; a -&gt; c) -&gt; (a -&gt; b) -&gt; b -&gt; b -&gt; c
f g h a b = g (h a) (h b)




On a related note, such function exists in the standard libraries. It's called on, and the idea is to use it in infix form, so that it almost reads like English:

eqAmounts = (==) `on` amount
cmpNames = compare `on` name