gleam-lang/gleam
View on GitHubPattern matching on tuples or custom types produces broken JavaScript
Open
#5680 opened on May 3, 2026
help wantedhigh priority
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.
~ 💜