Yes. You've concluded correctly.
Since Int -> Int -> Ordering
is curried, it can be seen as a function of one argument, which returns another function. I.e.:
Int -> (Int -> Ordering)
Hence the compiler resolves the Monoid
instances in three steps:
Value Type | Monoid Instance
--------------------------|---------------------------
Int -> (Int -> Ordering) | instance Monoid b => Monoid (a -> b)
Int -> Ordering | instance Monoid b => Monoid (a -> b)
Ordering | instance Monoid Ordering