Это странный синтаксис F #: знак плюс или минус, сразу после которого следует числовой литерал, обрабатывается как положительное или отрицательное число соответственно, а не как оператор, за которым следует число.
> 42
it : int = 42
> +42
it : int = 42
> -42
it : int = -42
Итак, ваш второй пример let add2 x = x +1
эквивалентен let add2 x = x 1
. Выражение x 1
означает, что x
- это функция, и она применяется к аргументу 1
, который в точности соответствует тому, что говорит ваш тип:
add2 : x:(int -> 'a) -> 'a
Это говорит о том, что add2
принимает функцию с именем x
, которая принимает int
и возвращает некоторое 'a
, и что add2
сам также возвращает тот же 'a
.