I have three functions that ought to be equal:
let add1 x = x + 1
let add2 = (+) 1
let add3 = (fun x -> x + 1)
Why do the types of these methods differ?
add1 and add3 are int -> int, but add2 is (int -> int).
They all work as expected, I am just curious as to why FSI presents them differently?
This is typically an unimportant distinction, but if you’re really curious, see the Arity Conformance for Values section of the F# spec.
My quick summary would be that
(int -> int)is a superset ofint -> int. Sinceadd1andadd3are syntactic functions, they are inferred to have the more specific typeint -> int, whileadd2is a function value and is therefore inferred to have the type(int -> int)(and cannot be treated as anint -> int).