2010-08-17 2 views
10

결합 연산자의 명시 적 유형 매개 변수는 :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>"

그래서 운영자 정의에 대한 명시 적 형식 인수 지정을 할 수있는 올바른 방법은 무엇?

p.s. 암시 적 타입 매개 변수와 다른 해결 방법에 대해 말하지 말고 구체적으로이 문제를 해결하고 싶습니다.

답변

12

컴파일러의 버그는 기호 연산자가 유형 매개 변수 바로 옆에있는 것으로 결코 간주되지 않는다는 것을 의미합니다. 예를 들어 해결 방법을 통해 해결할 수 있습니다. | SomePatternName |) <'a, 'b> X = x` 가`(하자,

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 
+1

또한 활성 패턴은 같은 버그가 – ControlFlow

4
let inline (===) (a : 'TA when 'TA : not struct) (b : 'TB when 'TB : not struct) = 
    obj.ReferenceEquals (a,b) 
+0

좋은, 그러나 이것은 명시 적 형식 매개 변수를하지) – ControlFlow

관련 문제