Я разбираю цитаты кода в 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 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
). - person Ramon Snir   schedule 13.03.2013