このアクティブなパターンはF#2.0でコンパイルされます。
let (|Value|_|) value = // 'a -> 'T option
match box value with
| :? 'T as x -> Some x
| _ -> None
ただし、F#3.0では、次のエラーが発生します。
アクティブパターン'|値|_|' 入力によって決定されない型変数を含む結果型があります。一般的な原因は、結果のケースが言及されていない場合の[原文のまま]です。たとえば、'let(| A | B |)(x:int)=Ax'です。これは、型制約で修正できます。たとえば、'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