FSharp でコード クォーテーションを解析し、パターン ヘルパーを構築しています。私が試すまではすべてうまくいっていた
let (|BinaryFn|_|) fn (input:Expr) =
function
| SpecificCall fn (_,_,l::r::[]) -> Some(l,r)
| _ -> None
let (|Multiply|_|) x =
function
| BinaryFn <@ (*) @> (l,r) -> Some(l,r)
| _ -> None
その意図は、''左'' と ''右'' を返す汎用バイナリ関数マッチャーを用意し、Multiple、Divide、Add および Subtract などの特殊なバイナリ マッチャーを作成することです。
ただし、2番目のパターンでエラーが発生します
Error FS0001: Type mismatch. Expecting a
'a -> 'b option
but given a
'a -> 'c -> (Expr * Expr) option
The type ''a option' does not match the type
''b -> (Expr * Expr) option' (FS0001) (Shambolics)
誰かが私がここで何をすべきか教えてもらえますか?