Aktywny wzór złamany w F # 3.0
Ten aktywny wzorzec kompiluje się z F # 2.0:
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
ale w F # 3.0 emituje błąd:
Aktywny wzór „| Wartość | _ |” ma typ wyniku zawierający zmienne typu, które nie są określone przez dane wejściowe. Powszechną przyczyną jest sytuacja, w której nie podano przypadku wyniku, np. 'let (| A | B |) (x: int) = A x'. Można to naprawić za pomocą ograniczenia typu, np. 'let (| A | B |) (x: int): Choice = A x'
Próbowałem:
let (|Value|_|) value : 'T option = ...
i:
let (|Value|_|) (value: 'U) = ...
Jak to naprawić?
Środowiska: Visual Studio 2012 (RTM) i FSI v11.0.50727.1
EDIT: Oto prostsze podejście:
let (|X|) x = unbox x