///|
/// Pattern printing functions
fn print_func(func : @syntax.Func, logger : StringBuilder) -> Unit {
match func {
Lambda(parameters~, body~, return_type~, error_type~, kind~, ..) => {
match kind {
Lambda => logger.write_string("fn")
Matrix => logger.write_string("fn")
Arrow => logger.write_string("fn")
}
logger.write_string("(")
print_list(parameters, print_parameter, ", ", logger)
logger.write_string(")")
match return_type {
Some(ret_ty) => {
logger.write_string(" -> ")
print_type(ret_ty, logger)
}
None => ()
}
print_error_type(error_type, logger)
logger.write_string(" { ")
print_expr(body, logger)
logger.write_string(" }")
}
Match(cases~, ..) => {
logger.write_string("fn { ")
for case in cases {
print_list(case.patterns, print_pattern, ", ", logger)
match case.guard_ {
Some(guard_expr) => {
logger.write_string(" if ")
print_expr(guard_expr, logger)
}
None => ()
}
logger.write_string(" => ")
print_expr(case.body, logger)
logger.write_string("; ")
}
logger.write_string("}")
}
}
}