patterns
Mason supports single-level pattern-matching inside of case
expressions.
Point = class x y magnitude = \case || This is a simple expression. :Num _ || Write extracted variables from the type. :Point x y Math.sqrt + (** x 2) ** y 2 . magnitude 0 . magnitude new Point 3 4
You can write custom pattern matching by implementing the builtin extract method.
This should return null
or an array of extracted values.
multiple-of = \n with {} self-impl! extract _ \case divisible? _ n [/ _ n] else null foo = \case :(multiple-of 2) n "#n pairs" :(multiple-of 3) n "#n triples" else 'other . foo 8 . foo 9 . foo 11
destructuring
Mason supports simple object destructuring.
It currently does not support renaming or default values, but that's planned.
{a b} = {a. 1 b. 2} + a b
Array destructuring is planned.
In the future, Mason will unify destructuring with patterns and support both within cases, assignments, and parameters.
Nested patterns {p1. :Point x1 y1 p2. :Point x2 y2}
are also planned.