Можете ли вы распаковать дискриминированные союзы без файла подписи?
Проектирование с единичными типами DU
type DoB = | DoB of System.DateTime
let DoB (dt:DateTime) = // shadow constructor
if(dt.Year>1914) // business defines what a min Date of Birth should be
then Some(DoB dt)
else None
И я вижу через ответы на упаковку Multi-case DU, вы можете сделать конструктор затенения без .fsi
подать очень легко.
Я имею в виду распаковку let value (EmailAddress e):string = e
из статьи (которая должна быть в .fsi
файл или применяется к этому DoB
Тип будет выглядеть let value (DoB dob):DateTime = dob
если бы у нас был .fsi
файл.
Можете ли вы сделать то же самое для развертывания, что было сделано с помощью конструктора?
могу ли я как-то определить развёртку или какое-то дополнение?
1 ответ
Решение
Если я понимаю, что вы подразумеваете под развертыванием, вы можете использовать активный шаблон:
//File1.fs
let (|DoB|) (DoB dt) = dt
//File2.fs
let dob = DoB DateTime.Now //using `DoB` "constructor" function
match dob with
| Some (DoB dt) -> //using `DoB` active pattern
printfn "DOB: %A" dt
| None ->
printfn "Not a DOB"
Это работает без дублирования функции с тем же именем, потому что активные шаблоны находятся в отдельной области именования.