F# タプルの型拡張メソッドを作成しようとしています。このコードは問題なくコンパイルされます。
type System.Tuple<'a, 'b> with
member this.ToParameter name =
match this with
| this -> sprintf "%s=%O,%O" name (this.Item1, this.Item2)
ただし、このメソッドを呼び出そうとすると:
printfn "%s" (("cat", 2).ToParameter("test"))
「このフィールド、コンストラクター、またはメンバー 'ToParameter' は定義されていません」というエラーが表示されます。インタープリターでは、次の式は、それらの型を何らかの形式の System.Tuple'2 として報告します。
typedefof<'a * 'b>.FullName
(1, 2).GetType().FullName
Visual Studio で式にカーソルを合わせると、次のようになります。
let a = 1, 2
int * int の型を報告します。この型を拡張しようとすると、またはそれが一般的な等価物である 'a * 'b である場合、エラーが発生します。
F# タプルの一般的な拡張を作成することは可能ですか?