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 fromval add1 : x:int->int
toval add2 : x:(int -> 'a) -> 'a
As far as I understand, the first type statement says add1
maps int
onto int
. But what is the meaning of the second one.
Well, '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 'a
.
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