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) является более гибким, чем первый (a), потому что «tail» из 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)

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