Skip to content

Patterns

Patterns take apart sum types and records.

Where Form
match arm Variant(x) => e, Variant => e, _ => e
if-let if (Some(x) = e) { ... } else { ... }
while-let while (Some(x) = e) { ... }
destructuring binding Point { x, y } = p;, Some(v) = opt;
  • A variant pattern binds the payload to a new name; payload-less variants are written by name.
  • Patterns are one level deep: match on the outer variant, then match or read the payload.
  • A destructuring binding must be irrefutable: a pattern that could fail to match is a compile-time error.
  • Every name a pattern binds is new; it cannot shadow a name in scope.