================================================================================ Match ================================================================================ decl fruit_cost : Fruit -> Int def fruit_cost : fruit = { return (match fruit with | $Banana -> 11 | $Apple | $Orange -> 7) } decl amount_to_string : Int -> Bool -> String def amount_to_string : x is_zero_separated = { const ans = match x with | 0 ? is_zero_separated -> "Zero" | 0 | 1 | 2 | 3 | 4 -> "Few" | x ? (5--9).contains: x -> "Several" | x ? (10--19).contains: x -> "Pack" | _ -> "Lots" return ans } -------------------------------------------------------------------------------- (source_file (source_statement (namespace_statement (function_declaration (extended_name (name_identifier)) (function_type (scoped_any_type (type_expression (parametrized_type (type_identifier)))) (scoped_any_type (type_expression (parametrized_type (type_identifier)))))))) (source_statement (namespace_statement (function_definition_statement (function_definition (extended_name (name_identifier)) (extended_name (name_identifier))) (superexpression (expression (prefixed_expression (block (block_statement (prefixed_expression (return_expression (expression (subexpression (subexpression_token (scoped_statement (superexpression (flow_control (match (expression (subexpression (subexpression_token (name_expression (extended_name (name_identifier)))))) (match_case (pattern (type_constructor_pattern (type_expression (parametrized_type (type_identifier))))) (expression (subexpression (subexpression_token (literal (number_literal)))))) (match_case (pattern (type_constructor_pattern (type_expression (parametrized_type (type_identifier)))))) (match_case (pattern (type_constructor_pattern (type_expression (parametrized_type (type_identifier))))) (expression (subexpression (subexpression_token (literal (number_literal))))))))))))))))))))))) (source_statement (namespace_statement (function_declaration (extended_name (name_identifier)) (function_type (scoped_any_type (type_expression (parametrized_type (type_identifier)))) (scoped_any_type (type_expression (parametrized_type (type_identifier)))) (scoped_any_type (type_expression (parametrized_type (type_identifier)))))))) (source_statement (namespace_statement (function_definition_statement (function_definition (extended_name (name_identifier)) (extended_name (name_identifier)) (extended_name (name_identifier))) (superexpression (expression (prefixed_expression (block (block_statement (variable_definition_statement (any_name (annotated_name (extended_name (name_identifier)))) (superexpression (flow_control (match (expression (subexpression (subexpression_token (name_expression (extended_name (name_identifier)))))) (match_case (pattern (literal (number_literal))) (expression (subexpression (subexpression_token (name_expression (extended_name (name_identifier)))))) (expression (subexpression (subexpression_token (literal (string_literal)))))) (match_case (pattern (literal (number_literal)))) (match_case (pattern (literal (number_literal)))) (match_case (pattern (literal (number_literal)))) (match_case (pattern (literal (number_literal)))) (match_case (pattern (literal (number_literal))) (expression (subexpression (subexpression_token (literal (string_literal)))))) (match_case (pattern (extended_name (name_identifier))) (expression (subexpression (function_call_expression (subexpression_token (scoped_statement (superexpression (expression (subexpression (binary_operator_expression (subexpression (subexpression_token (literal (number_literal)))) (operator) (subexpression (subexpression_token (literal (number_literal)))))))))) (extended_name (name_identifier)) (subexpression_token (name_expression (extended_name (name_identifier))))))) (expression (subexpression (subexpression_token (literal (string_literal)))))) (match_case (pattern (extended_name (name_identifier))) (expression (subexpression (function_call_expression (subexpression_token (scoped_statement (superexpression (expression (subexpression (binary_operator_expression (subexpression (subexpression_token (literal (number_literal)))) (operator) (subexpression (subexpression_token (literal (number_literal)))))))))) (extended_name (name_identifier)) (subexpression_token (name_expression (extended_name (name_identifier))))))) (expression (subexpression (subexpression_token (literal (string_literal)))))) (match_case (pattern (extended_name (name_identifier))) (expression (subexpression (subexpression_token (literal (string_literal))))))))))) (block_statement (prefixed_expression (return_expression (expression (subexpression (subexpression_token (name_expression (extended_name (name_identifier)))))))))))))))))