Ответ 1
То, что причуда синтаксиса 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
.