Patrón activo roto en F # 3.0
Este patrón activo se compila con F # 2.0:
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
pero, en F # 3.0, emite el error:
Patrón activo '| Valor | _ |' tiene un tipo de resultado que contiene variables de tipo que no están determinadas por la entrada. La causa común es un [sic] cuando no se menciona un caso de resultado, por ejemplo. 'let (| A | B |) (x: int) = A x'. Esto se puede arreglar con una restricción de tipo, por ejemplo, 'let (| A | B |) (x: int): Elección = A x'
Lo intenté:
let (|Value|_|) value : 'T option = ...
y:
let (|Value|_|) (value: 'U) = ...
¿Cómo se puede arreglar?
Entornos: Visual Studio 2012 (RTM) y FSI v11.0.50727.1
EDITAR: Aquí hay una repro más simple:
let (|X|) x = unbox x