Patterns
literal_pattern ::= literal
wildcard_pattern ::= "_"
binding_pattern ::= lower_ident
pattern_field ::= lower_ident ":" pattern
variant_pattern ::= upper_path "{" pattern_field ( "," pattern_field )* "}"
| upper_path "(" pattern ( "," pattern )* ")"
| upper_path
pattern ::= literal_pattern
| wildcard_pattern
| binding_pattern
| variant_pattern
Literal patterns
literal_pattern ::= literal
Strings
Numbers
Booleans
Wildcard patterns
wildcard_pattern ::= "_"
Binding patterns
binding_pattern ::= lower_ident
Union variant patterns
pattern_field ::= lower_ident ":" pattern
variant_pattern ::= upper_path "{" pattern_field ( "," pattern_field )* "}"
| upper_path "(" pattern ( "," pattern )* ")"
| upper_path