What is the difference between
let add1 x = x + 1 and
let add2 x = x +1. The accidental removal of space changed the type of function from
val add1 : x:int->int to
val add2 : x:(int -> 'a) -> 'a
As far as I understand, the first type statement says
int. But what is the meaning of the second one.
'a represents a generic type, but how is the function
'add2' returning a generic?
Thanks for your help.
That's a quirk of F# syntax: a plus or minus sign immediately followed by a number literal is treated as a positive or negative number respectively, and not as an operator followed by a number.
> 42 it : int = 42 > +42 it : int = 42 > -42 it : int = -42
So your second example
let add2 x = x +1 is equivalent to
let add2 x = x 1. The expression
x 1 means that
x is a function and it's being applied to the argument
1, which is exactly what your type is telling you:
add2 : x:(int -> 'a) -> 'a
This says that
add2 takes a function named
x, which takes an
int and returns some
'a, and that
add2 itself also returns the same