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