11

明示的な型パラメーターと制約を使用して演算子を定義しようとしています:

let inline (===)<'a, 'b
    when 'a : not struct
     and 'b : not struct> a b = obj.ReferenceEquals (a,b)

F# 2.0 では問題なく動作しますが、次の結果が生成されます。

警告 FS1189:
型パラメーターは型名のすぐ隣に配置する必要があります。たとえば、型 "C<'T>" ではなく、"type C<'T>" です。

では、演算子定義の明示的な型引数指定を行う正しい方法は何ですか?

ps 暗黙の型パラメーターやその他の回避策について教えてください。この問題を具体的に解決したいのです。

4

2 に答える 2

13

コンパイラのバグは、シンボリック演算子が型パラメーターに直接隣接しているとは見なされないことを意味します。たとえば、次の方法で回避できます

let inline myeq<'a, 'b 
    when 'a : not struct 
    and 'b : not struct> a b = obj.ReferenceEquals (a,b) 

let inline (===) a b = myeq a b
于 2010-08-17T13:09:20.930 に答える
4
let inline (===) (a : 'TA when 'TA : not struct) (b : 'TB when 'TB : not struct) = 
    obj.ReferenceEquals (a,b)
于 2010-08-17T11:04:47.480 に答える