FSharp活动模式的问题



我正在解析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 

目的是有一个通用的二进制函数匹配器,返回"左"one_answers"右",然后创建专门的二进制匹配器,如Multiple, Divide和Add and Subtract。

然而,我在第二个模式上得到一个错误,

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)
谁能告诉我在这里我应该做些什么?

这里的问题是function不仅模式匹配最后一个参数,而且还添加了一个额外的参数(functionfunmatch之间的组合)。从第一个模式中删除函数参数input,问题就解决了。

相关内容

  • 没有找到相关文章

最新更新