Активное сопоставление с образцами дискриминированных союзов
Есть ли способ использовать различающееся объединение следующей формы с активным сопоставлением с образцом? Я не смог найти никаких примеров.
Вот что я пытаюсь сделать:
type c = a | b
type foo =
| bar1
| bar2 of c
//allowed
let (|MatchFoo1|_|) aString =
match aString with
| "abcd" -> Some bar1
| _ -> None
//not allowed
let (|MatchFoo2|_|) aString =
match aString with
| "abcd" -> Some (bar2 of a)
| _ -> None
Почему "Некоторые" нельзя использовать вторым способом? Есть ли другой способ добиться того же?
1 ответ
Решение
Вам нужно только использовать of
при объявлении типа, так что вы можете просто создать значения с bar2
конструктор как:
bar2 a
Ваша вторая функция должна работать, если вы измените ее на:
let (|MatchFoo2|_|) aString =
match aString with
| "abcd" -> Some (bar2 a)
| _ -> None