Diese aktiven Muster mit F 2.0 # kompilieren:Aktive Muster in F # gebrochen 3.0
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
aber in F # 3.0, gibt den Fehler:
Active pattern '|Value|_|' has a result type containing type variables that are not determined by the input. The common cause is a [sic] when a result case is not mentioned, e.g. 'let (|A|B|) (x:int) = A x'. This can be fixed with a type constraint, e.g. 'let (|A|B|) (x:int) : Choice = A x'
Ich habe versucht:
let (|Value|_|) value : 'T option = ...
und:
let (|Value|_|) (value: 'U) = ...
Wie kann es behoben werden?
Umgebungen: Visual Studio 2012 (RTM) und FSI v11.0.50727.1
EDIT: Hier ist ein einfacher Repro:
let (|X|) x = unbox x
Funktioniert gut für mich, Visual Studio 2012 RC aktualisiert, 'Microsoft (R) F # 3.0 Interaktive Build 11.0.50522.1'. Wenn ich den Fehler sehe, denke ich immer noch, dass es funktionieren sollte (so wie es ist). Das Beispiel im Fehler ('let (| A | B |) (x: int) = A x') zeigt tatsächlich den von Ihnen geposteten Fehler. –
'F # 2.0 interaktive Build 4.0.40219.1' gibt genau die gleichen Ergebnisse. –
Sorry, ich hätte etwas genauer in Bezug auf die Umgebung sein sollen. Ich habe die Frage aktualisiert. – Daniel