F#:运算符绑定中的显式类型参数

con*_*low 10 generics f# explicit operators type-parameter

我正在尝试使用显式类型参数和约束来定义运算符:

let inline (===)<'a, 'b
    when 'a : not struct
     and 'b : not struct> a b = obj.ReferenceEquals (a,b)
Run Code Online (Sandbox Code Playgroud)

它在F#2.0中运行良好,但产生:

警告FS1189:
类型参数必须直接放在类型名称旁边,例如"type C <'T>",而不是类型"C <'T>"

那么为运算符定义做出显式类型参数规范的正确方法是什么?

ps请不要告诉我隐式类型参数和其他一些解决方法,我想具体解决这个问题.

Bri*_*ian 12

编译器中的错误意味着符号运算符永远不会被认为与类型参数直接相邻.您可以通过例如解决方法

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
Run Code Online (Sandbox Code Playgroud)