on b u x y runs the binary function
b
on the results of applying unary function
u to two
arguments
x and
y. From the opposite perspective, it
transforms two inputs and combines the outputs.
((+) `on` f) x y = f x + f y
Typical usage:
sortBy (compare `on`
fst).
Algebraic properties:
(*) `on` id = (*) -- (if (*) ∉ {⊥, const
⊥})
((*) `on` f) `on` g = (*) `on` (f . g)
flip on f . flip on g = flip on (g .
f)