Aclaración de sintaxis de unión discriminada F #

Estoy leyendoExperto F # 4.0 y en algún momento (p.93) se introduce la siguiente sintaxis paralist:

type 'T list =
    | ([])
    | (::) of 'T * 'T list

Aunque entiendo conceptualmente lo que está sucediendo aquí, no entiendo la sintaxis. Aparentemente puedes poner[] o:: entre paréntesis y significan algo especial.

No se permiten otros símbolos, por ejemplo(++) o(||). Entonces, ¿qué está pasando aquí?

Y otra cosa es la naturaleza de "operador" de(::). Supongamos que tengo el siguiente tipo (extraño):

type 'T X =
    | None
    | Some of 'T * 'T X
    | (::) of 'T * 'T X

Ahora puedo decir:

let x: X<string> = Some ("", None)

pero estos no están permitidos:

let x: X<string> = :: ("", None)
let x: X<string> = (::) ("", None)

Entonces(::) en realidad es algo completamente diferente aSome, aunque ambos son casos en una unión discriminada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta