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 areint -> int
, but add2 is (int -> int)
.
They all work as expected, I am just curious as开发者_如何学C 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 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
).
精彩评论