здесь можно разворачивать их по одиночке, но можно ли развернуть вне зависимости от кейса?
конечно - SRTP
как через srtp развернуть du?
type IField = abstract field: bool type Generic<'a> = { someField: 'a; field: bool } interface IField with member this.field = this.field let inline (|Cast|) x: 'x = box x :?> 'x type U = | A of Generic<string> | B of Generic<int> | C of Generic<int> interface IField with member this.field = match this with | A (Cast (x: IField)) | B (Cast x) | C (Cast x) -> x.field let defVal = A { someField = ""; field = false } let trueOrDef (x: U): U = if (x :> IField).field then x else defVal
Из коробки F# юнионы такое не поддерживают. Если очень нужный кейс, то лучше сделай абстрактный класс
можно заинтерфейсить юнион как в моём примере
Да, но ты всё равно используешь ручной матчинг
Обсуждают сегодня