gleam-lang/gleam
Pattern matching on tuples or custom types produces broken JavaScript
Closed
#5,680 opened on May 3, 2026
help wantedhigh priority
Repository metrics
- Stars
- (21,417 stars)
- PR merge metrics
- (Avg merge 10d 19h) (69 merged PRs in 30d)
Description
The following Gleam code
pub fn main() {
case #(1, 2) {
#(a, _) -> a
}
{2 + 4} * 2
let a = 42
Nil
}
produces this Javascript:
export function main() {
let $ = [1, 2];
let a = $[0];
a
(2 + 4) * 2;
let a = 42;
return undefined;
}
Here, 2 things go wrong:
- the
abinding does not reserve the name in the enclosing scope, causing a parse error. - The expression inside the arm of the pattern is not followed by a semicolon. The line after it is constructed in such a way that this is now parsed as a function call, changing the meaning of this program.
Both of these can be triggered independently.
~ 💜