F #: явные параметры типа в привязке операторов

Я пытаюсь определить оператор с явными параметрами типа и ограничениями:

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

Хорошо работает в F # 2.0, но выдает:

Предупреждение FS1189:
Параметры типа должны быть размещены напрямую рядом с именем типа, например "тип" C <'T> ", не тип" C <' T> "

Итак, как правильно задавать явные аргументы типа для определения оператора?

ps Пожалуйста, не говорите мне о параметрах неявного типа и некоторые другие обходные пути, я хочу конкретно решить эту проблему.

10
задан Qantas 94 Heavy 1 May 2014 в 09:17
поделиться

2 ответа

Ошибка в компиляторе означает, что символьные операторы никогда не считаются непосредственно смежными с параметрами типа. Вы можете обойти эту проблему, например,

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
12
ответ дан 3 December 2019 в 21:57
поделиться
let inline (===) (a : 'TA when 'TA : not struct) (b : 'TB when 'TB : not struct) = 
    obj.ReferenceEquals (a,b)
4
ответ дан 3 December 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: