F# will even compile
let add a b = a + b add 1 2;;
val add : a:int -> b:int -> int val it : int = 3
let add a b = a + b add 1ul 2ul;;
val add : a:uint32 -> b:uint32 -> uint32 val it : uint32 = 3u
F# will even compile
as or as So it will even infer type from the first usage of the function.