Questo modello attivo compila con F # 2.0:modello attivo rotto in F # 3.0
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
ma, in F # 3.0, emette l'errore:
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'
ho provato:
let (|Value|_|) value : 'T option = ...
e:
let (|Value|_|) (value: 'U) = ...
Come può essere risolto?
Ambienti: Visual Studio 2012 (RTM) e FSI v11.0.50727.1
EDIT: Ecco un Repro semplice:
let (|X|) x = unbox x
Funziona bene per me, Visual Studio 2012 RC aggiornato, 'Microsoft (R) F # 3.0 build interattiva 11.0.50522.1'. Vedendo l'errore, continuo a pensare che dovrebbe funzionare (così come è). L'esempio nell'errore ('let (| A | B |) (x: int) = A x') presenta effettivamente l'errore che hai postato. –
'F # 2.0 Interactive build 4.0.40219.1' fornisce esattamente gli stessi risultati. –
Scusate, avrei dovuto essere più specifico sull'ambiente. Ho aggiornato la domanda. – Daniel