N-арные кортежи против пар

В Ocaml кортежи с разными арностями имеют конструкторы разных типов и значений:

# let a = (1, 2, 3);;
val a : int * int * int = (1, 2, 3)
# let b = (1, (2, 3));;
val b : int * (int * int) = (1, (2, 3))

Обратите внимание, что второй пример (б) является более гибким, чем первый (а), потому чтохвост" из b - (2, 3) - само по себе является допустимым значением:

# let (_, c) = b;;
val c : int * int = (2, 3)
# let d = snd b;;
val d : int * int = (2, 3)

В чем причина не разбирать "(1, 2, 3) как "(1, (2, 3)) " и вместо этого ввести бесконечное (или, что еще хуже, конечное) количество конструкторов нового типа и значения для разных арностей?

Ответы на вопрос(1)

Ваш ответ на вопрос