F# is probably the best designed language out there. I would use it more if there was a larger community outside .net and with native libraries
more info: https://fsharpforfunandprofit.com/troubleshooting-fsharp/#fs...
OCaml is better at type inference but it doesn't benefit from .Net libraries (the only reason I'm using F# over OCaml).
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.
Only been a doing f# for a couple months.
Thanks for the explanation. Keep crushing it.