3

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)

誰かが私がここで何をすべきか教えてもらえますか?

4

1 に答える 1

3

ここでの問題はfunction、最後の引数をパターン一致させるだけでなく、追加の引数 ( は と の組み合わせ) も追加することfunctionです。最初のパターンから関数の引数を削除すると、問題が解決されます。funmatchinput

于 2013-03-12T20:47:24.747 に答える