Довольно скудно описан синтаксис для матчинга самих выражений, который довольно часто используется в макросах.
Встречаю только отдельные примеры в макросах и сниппетах, типа таких применений:
делать
match (...)
| <[ $nm [..$generics] ]> =>
def (parms, args) = interpret_generics (generics);
(nm, parms, args, <[ $nm.[..$args] ]> )
| <[ Override ($current, $overriden) ]> =>
def (nm,parms,args,_) = interpret_expr (current);
(nm, parms, args, overriden)
| _ => (e, [], [], e)
}
def get_simple_name (e, nm) {
match (e) {
| <[ $e [..$_] ]>
| <[ $e . [..$_] ]>
| <[ $e ]> =>
match (Util.QidOfExpr (e)) {
| Some ((li, _)) => (li.Last, nm : object == e) // nm == e iff we didn't have Override specified
| _ => Message.FatalError (e.Location, $"invalid overriden type specified: $e");
}
}
}
но где достать полноценное описание и список всех вариантов матчингов выражений?