Разница F # между пусть add1 x = x + 1 и пусть add2 x = x +1 - PullRequest
0 голосов
/ 29 июня 2018

В чем разница между let add1 x = x + 1 и let add2 x = x +1. Случайное удаление пробела изменило тип функции с
val add1 : x:int->int до
val add2 : x:(int -> 'a) -> 'a

Насколько я понимаю, первое утверждение типа гласит: add1 отображает int на int. Но в чем смысл второго.

Ну, 'a представляет универсальный тип, но как функция 'add2' возвращает универсальный тип?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 29 июня 2018

Это странный синтаксис 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.

...