I think these are useful in general, and that they would make a good addition to `Data.Ord`. The names are inspired by `sortOn`. Definitions:
```
minOn :: Ord b => (a -> b) -> a -> a -> a
minOn f x y =
case comparing f x y of
LT -> x
_ -> y
maxOn :: Ord b => (a -> b) -> a -> a -> a
maxOn f x y =
case comparing f x y of
GT -> x
_ -> y
```
These don't need to be the exact definitions, but they convey the semantics I'm looking for.