差別化された共用体型宣言内でアクティブ パターンを使用することは可能ですか?
より正確には、次のおもちゃの例を考えてみましょう。
type T =
| A of int
| B
let (|Negative|_|) t =
match t with
| A n when n < 0 -> Some ()
| _ -> None
let T_ToString = function
| Negative () -> "negative!"
| _ -> "foo!"
ここで、T で ToString() をオーバーライドしたいとします。T の型宣言内では、T_ToString がその時点でまだ宣言されていないため、T_ToString を参照できません。ToString() の前にアクティブなパターンと T_ToString を移動することはできません。これは、その時点では T がまだ宣言されていないためです。しかし、これもうまくいきません:
type T =
| A of int
| B
static member (|Negative|_|) t =
match t with
| A n when n < 0 -> Some ()
| _ -> None
override this.ToString () =
match this with
| Negative () -> "negative!"
| _ -> "foo!"