How to represent tuples in AST?

I guess that newcomers have some math background. When in math, we have a dimension 3 vector in R^3, we mean RxRxR, not Rx(RxR), then I do not see the pedagogic interest of decomposing a 'a * 'a * 'a as a 'a * ('a * 'a). We have such a decomposition about lists because they are implemented like this and this permits a recursive processing with them, but it may not be so intuitive. I mean that when I read [1; 2; 3], I see a 3 items unit, not fundamentally different from [|1; 2; 3|]. The main difference is that it is easier to remove the first item in a recursion. (Operators complexity are also different, obviously).

Perhaps newcomers come from Python, and here, (1,2,3) is not (1,(2,3)). The only difference between Python and OCaml tuples is that Python can express 1-tuple with a special notation: (1,), and the 0-tuple, (), is considered as a tuple where OCaml name it a unit.

I have already made a langage M interpreter. Having a lists in the AST (like a set of arguments or a set of record fields) doesn’t make any problem.