这个活动模式可与F#2.0编译:
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
但是,在 F# 3.0 中,会出现以下错误:
活动模式 '|Value|_|' 具有包含未由输入确定的类型变量的结果类型。常见原因是结果情况没有被提及,例如 '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
Microsoft (R) F# 3.0 Interactive build 11.0.50522.1
。虽然看到了错误,但我仍然认为它应该可以工作(因为它确实可以)。错误中的示例(let (|A|B|) (x:int) = A x
)确实出现了你发布的错误。 - Ramon Snir