Como posso impor a criação de um valor de União Discriminada por meio de uma função dedicada?
Como posso impor a criação de um valor de União Discriminada por meio de uma função dedicada?
Intenção:
Eu quero confiar nos padrões criacionais para produzir estruturas que tenham apenas dados válidos.
Portanto, acredito que precisarei restringir o uso de um valor de DU, tornando-o somente leitura. No entanto, não é óbvio para mim como fazer isso.
module File1 =
type EmailAddress =
| Valid of string
| Invalid of string
let createEmailAddress (address:System.String) =
if address.Length > 0
then Valid address
else Invalid address
module File2 =
open File1
let validEmail = Valid "" // Shouldn't be allowed
let isValid = createEmailAddress ""
let result = match isValid with
| Valid x -> true
| _ -> false
Eu tentei o seguinte:
type EmailAddress =
private
| Valid of string
| Invalid of string
No entanto, definir o tipo de DU como privado interrompe a capacidade de executar a correspondência de padrões no resultado da função de criação.