->
прав ассоциативная в аннотации типа SML, так int list -> (int * string -> int)
правильно.
Рассмотрим простой эксперимент в РЕПЛ:
- fun add x y = x+y;
val add = fn : int -> int -> int
add
является функцией, которая, когда кормили Int возвращает функцию, а именно функцию, которая посылает y
к x + y
- следовательно, его тип int -> (int ->int)
. Это не функция, которая, когда функция fed из ints в ints выводит int (что будет (int -> int) -> int
). Несколько искусственный пример позднего рода вещи:
- fun apply_to_zero_and_increment f = 1 + f(0);
val apply_to_zero_and_increment = fn : (int -> int) -> int
Если я определяю fun g(x) = x + 5
затем apply_to_zero_and_increment g
возвращается 6.