我正在解析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
意图是拥有一个通用的二进制函数匹配器,它返回“左侧”和“右侧”,然后创建专门的二进制匹配器,例如多个、除以、加和减。
但是我在第二个模式上遇到了错误。
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
表达式)。 - Ramon Snir