Reputation: 7877
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?
Upvotes: 11
Views: 314
Reputation: 55184
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 of int -> int
. Since add1
and add3
are syntactic functions, they are inferred to have the more specific type int -> int
, while add2
is a function value and is therefore inferred to have the type (int -> int)
(and cannot be treated as an int -> int
).
Upvotes: 16