Tuplas N-ary vs parejas

En Ocaml, las tuplas con diferentes aridades tienen diferentes constructores de tipo y valor:

# 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))

Tenga en cuenta que el segundo ejemplo (b) es más flexible que el primero (a) porque la "cola" de b - (2, 3) - en sí misma es un valor válido:

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

¿Cuál es la razón para no analizar "(1, 2, 3)" como "(1, (2, 3))" y en su lugar introducir una cantidad infinita (o, peor aún, finita) de nuevos constructores de tipo y valor para diferentes aridades ?

Respuestas a la pregunta(1)

Su respuesta a la pregunta