此活动模式与 F# 2.0 一起编译:
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
但是,在 F# 3.0 中,会发出错误:
活动模式 '|Value|_|' 具有包含不由输入确定的类型变量的结果类型。当没有提到结果情况时,常见原因是 [sic],例如,'let (|A|B|) (x:int) = A x'。这可以通过类型约束来修复,例如 'let (|A|B|) (x:int) : Choice = A x'
我试过了:
let (|Value|_|) value : 'T option = ...
和:
let (|Value|_|) (value: 'U) = ...
如何修复?
环境:Visual Studio 2012 (RTM) 和 FSI v11.0.50727.1
编辑:这是一个更简单的复制:
let (|X|) x = unbox x