FSharp活动模式有问题

时间:2013-03-12 20:14:33

标签: f# quotations active-pattern

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

目的是让一个通用的二元函数匹配器返回''left''和''right'',然后创建专门的二进制匹配器,如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)

有人可以告诉我我应该在这做什么吗?

1 个答案:

答案 0 :(得分:3)

这里的问题是function不仅模式匹配最后一个参数,还添加了一个额外的参数(functionfun和{{1}之间的组合}})。从第一个模式中删除函数参数match,您的问题将得到解决。