Сигнатуры типов одинаковы, скобки просто помогают указать, что тело функции приводит к возвращению функции.
Эти три формы с полным аннотированным типом эквивалентны:
let adderGenerator : int -> int -> int =
(+)
let adderGenerator (numberToAdd : int) : int -> int =
(+) numberToAdd
let adderGenerator : int -> int -> int =
fun numberToAdd -> (+) numberToAdd
Первая форма является просто псевдонимом для +
и просто повторяет ее тип.
Вторая форма - это объявление функции, которая аннотирует тип аргумента и тип возвращаемого значения отдельно.
Третья форма - это переменная, которой назначена анонимная функция.
Однако, только одно явное указание аргумента кажется мне немного странным.Вы можете полностью избежать частичного применения, сделав оба аргумента явными:
let adderGenerator (a : int) (b : int) : int =
(+) a b
let adderGenerator : int -> int -> int =
fun a b -> (+) a b