Активное сопоставление с образцами дискриминированных союзов

Есть ли способ использовать различающееся объединение следующей формы с активным сопоставлением с образцом? Я не смог найти никаких примеров.

Вот что я пытаюсь сделать:

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
Другие вопросы по тегам