> this means the compiler can't infer the type for a function argument event though I pass it an `int` later in the file.
That's demonstrably untrue by the simplest of code snippets.
let f x = ()
f 12
Here, 'f' is generic becuase 'x' isn't used in a way that would constrain it in any way. let inline f x = x + 1
f 12
Here, 'f' is constrained to be generic over any type that defines how '+' works for it. let f x = x + 1
f 12
Here, 'f' is constrained to be 'int' because that's what's passed in and assumed as the type given that it's not marked as 'inline'.The article you link to is referring to type inference for .NET Object types, because member lookup is not used as a means to inform how type constraints are solved.
When any primitive or any F# type (records, unions, anonymous records, etc.) is passed in the lookup is not indeterminate.