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 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
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With