I'm trying to define operator with the explicit type parameters and constraints:
let inline (===)<'a, 'b
when 'a : not struct
and 'b : not struct> a b = obj.ReferenceEquals (a,b)
It works well in F# 2.0, but produces the:
warning FS1189:
Type parameters must be placed directly adjacent to the type name, e.g. "type C<'T>", not type "C <'T>"
So what is the right way to do explicit type arguments specification for operator definition?
p.s. Please don't tell me about implicit type parameters and some other workarounds, I want to solve concretely this issue.
A bug in the compiler means that symbolic operators are never considered directly adjacent to type parameters. You can workaround via e.g.
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
let inline (===) (a : 'TA when 'TA : not struct) (b : 'TB when 'TB : not struct) =
obj.ReferenceEquals (a,b)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With