One can imagine using more ordinary constructor names instead:
type 'a list = Nil | Cons of 'a * 'a list
And then the above would be:
Cons (x, Cons (y, Cons (z, Nil)))
In OCaml, data constructor names mar be either a capital letter followed by set or more capital/lower letters/underscores/apostrophes/digits, or one of the following:
[]
()
true
false
(::)
Type directed constructor disambiguating means you can do funky things like:
type 'a nonempty = (::) of 'a * 'a list
And write such a value just like you would a normal list.