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.