How to represent tuples in AST?

Yes, in OCaml those three have a different type. But if you were to write your own miniML interpreter (as I understood was the intention here) you may choose to only have pairs and parse tuples as nested pairs. Then fst and snd are always well defined for any tuple.

So basically , would just become an infix operator for constructing pairs, and you would need to choose if it’s right or left associative.

However, you do pay in terms of expressivity, as the expressions (1, 2, 3) and (1, (2, 3)) (assuming , to be right associative) would both end up having the type int * (int * int), and sometimes you might want to make them distinct.