вместо.

могу обеспечить создание значения Дискриминационного союза с помощью специальной функции?

Намерение:

Я хочу положиться на 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 в качестве частного прерывает возможность выполнения сопоставления с образцом в результате функции создания.

Ответы на вопрос(4)

Ваш ответ на вопрос