Padrão ativo quebrado em F # 3.0
Este padrão ativo compila com F # 2.0:
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
mas, em F # 3.0, emite o erro:
Padrão ativo '| Valor | _ |' tem um tipo de resultado contendo variáveis de tipo que não são determinadas pela entrada. A causa comum é um [sic] quando um caso de resultado não é mencionado, por ex. 'let (| A | B |) (x: int) = A x'. Isso pode ser corrigido com uma restrição de tipo, por exemplo 'let (| A | B |) (x: int): escolha = A x'
Eu tentei:
let (|Value|_|) value : 'T option = ...
e:
let (|Value|_|) (value: 'U) = ...
Como isso pode ser corrigido?
Ambientes: Visual Studio 2012 (RTM) e FSI v11.0.50727.1
EDIT: Aqui está uma repro simples:
let (|X|) x = unbox x