On Thu, 23 Feb 2006, Frédéric Gava wrote: >> # type t=A of int*int and t'= B of (int*int);; >> type t = A of int * int >> and t' = B of (int * int) >> See section 18.3.4 of the manual -- the distinction allows the runtime >> representation of t to avoid a level of indirection. > > Thanks for your anwser but I am not convinced that is a good reason. If "t" > is better why " t' " is not automatically tranform into "t" (it is easy, you > just delete the global parens). ok (int->int)->int <> int->int->int or > int*int*int<>int*(int*int) . Morever I think that int*int=(int*int) > "everywhere" in ML... This isn't correct- the same problem shows up in the difference between: int*int*int and int*(int*int)- i.e. the difference between (1,2,3) and (1,(2,3)). In the first case (in both examples) I have a three element tuple, in the second case I have a two element tuple whose second element is also a two element tuple (and thus I have the layer of indirection). Also, sometimes I want one and sometimes I want the other. I can often save copying information (and storing the duplicate information) if I can add the level of indirection- this is important if I'm copying the information a lot. On the other hand, if the information isn't being duplicated a lot, then I can save memory by not having the extra level of indirection. Brian