Я не уверен, разрешены ли нестатические активные шаблоны открытых членов, но вы можете определить их без жалоб компилятора. Если они разрешены, каков синтаксис для сопоставления с одним? Компилятор дает мне несоответствие типов для Foo в FooBar2.doSomething. Ожидая 'a -> Choice<'b,'c>
учитывая 'a -> 'd -> Choice<unit,unit>
// No error in this class, static works great
type FooBar() =
static member (|Foo|Bar|) (x, y) =
match x = y with
| true -> Foo
| false -> Bar
member x.doSomething y =
match x, y with
| Foo -> ()
| Bar -> ()
type FooBar2() =
member x.(|Foo|Bar|) y =
match x = y with
| true -> Foo
| false -> Bar
// compiler error on "Foo"
member x.doSomething y =
match y with
| Foo -> ()
| Bar -> ()