plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
plum-tooling/tree-sitter-plum/test/corpus/match.txt
================================================================================
match
================================================================================
fun main() =
match a
1 =>
printLn(a)
"hi" =>
printLn(a)
True =>
printLn(a)
Some(b) =>
printLn(b)
x =>
printLn(x)
_ =>
printLn(a)
--------------------------------------------------------------------------------
(source
(fn
(fn_identifier)
(body
(match
(expression
(primary_expression
(var_identifier)))
(case
(case_pattern
(integer))
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))
(case
(case_pattern
(string
(string_start)
(string_content)
(string_end)))
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))
(case
(case_pattern
(type_identifier))
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))
(case
(case_pattern
(class_pattern
(type_identifier)
(case_pattern
(dotted_name
(var_identifier)))))
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))
(case
(case_pattern
(dotted_name
(var_identifier)))
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))
(case
(case_pattern)
(body
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier)))))))))))))
================================================================================
match - inline case bodies
================================================================================
fun main() =
match a
1 => printLn(a)
2 => printLn(b)
_ => printLn(c)
--------------------------------------------------------------------------------
(source
(fn
(fn_identifier)
(body
(match
(expression
(primary_expression
(var_identifier)))
(case
(case_pattern
(integer))
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier))))))))
(case
(case_pattern
(integer))
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier))))))))
(case
(case_pattern)
(expression
(primary_expression
(fn_call
(var_identifier)
(fn_argument_list
(expression
(primary_expression
(var_identifier))))))))))))
================================================================================
match - guard-clause arms, no subject
================================================================================
fun compare(x: Int, y: Int) -> Int =
match
| x > y =>
1
| x == y =>
0
| _ =>
-1
--------------------------------------------------------------------------------
(source
(fn
(fn_identifier)
(param
(var_identifier)
(type
(type_identifier)))
(param
(var_identifier)
(type
(type_identifier)))
(type
(type_identifier))
(body
(match
(guard_case
(expression
(comparison_operator
(primary_expression
(var_identifier))
(primary_expression
(var_identifier))))
(body
(expression
(primary_expression
(integer)))))
(guard_case
(expression
(comparison_operator
(primary_expression
(var_identifier))
(primary_expression
(var_identifier))))
(body
(expression
(primary_expression
(integer)))))
(guard_case
(body
(expression
(primary_expression
(unary_operator
(primary_expression
(integer)))))))))))