F# で、任意の代数データ型の述語とアクセサーをタイプセーフな方法で自動的に生成することは可能ですか?
たとえば、ユーザー定義型がある場合:
type A =
B of string
| C of int * sting
次のように生成する必要があります。
type A =
B of string
| C of int * sting
with
member __.isB = match __ with B -> true | _ -> false
member __.isC = match __ with C -> true | _ -> false
member __._1 = match __ with B(x) -> Some(x) | _ -> None
member __._2 = match __ with C(x,_) -> Some(x) | _ -> None
member __._3 = match __ with C(_,x) -> Some(x) | _ -> None
アクセサーの名前を指定できる場合は、次のような注釈を付けることができます。
[<GenerateAccessors(["BName", "CName", "Value"])>]
内部データへのアクセスを簡単にしたい場合は、それができないか、判別共用体 (DU) の代わりにレコードを使用する必要があります。しかし、DU でパターン マッチングを使用する方が単純であり、単純なパターン マッチングと単純な「直接データ アクセス」の両方を同時に実現したいと考えています。