вместо.
могу обеспечить создание значения Дискриминационного союза с помощью специальной функции?
Намерение:
Я хочу положиться на Creational Patterns для создания структур, имеющих только действительные данные.
Поэтому я считаю, что мне нужно будет ограничить использование значения DU, сделав его доступным только для чтения. Однако для меня не очевидно, как этого добиться.
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
Я попробовал следующее:
type EmailAddress =
private
| Valid of string
| Invalid of string
Тем не менее, установка типа DU в качестве частного прерывает возможность выполнения сопоставления с образцом в результате функции создания.