gleam-lang/gleam
Equality with an aliased variant silently returns False on JavaScript
Geschlossen
#5.757 geöffnet am 27.05.2026
help wantedhigh priority
Repository-Metriken
- Stars
- (21.417 Sterne)
- PR-Merge-Metriken
- (Durchschn. Merge 10T 19h) (69 gemergte PRs in 30 T)
Beschreibung
- Gleam: 1.16.x
- Target:
javascriptonly — Erlang is unaffected
On the JavaScript target, comparing a value to a no-args variant that you imported under an alias can produce the wrong result. The same code compiled to Erlang works correctly.
// src/aliased_variant_bug/foo.gleam
pub type FooStatus { Active Inactive }
// src/aliased_variant_bug/bar.gleam
pub type BarStatus { Active Disabled }
// src/aliased_variant_bug.gleam
import aliased_variant_bug/bar.{type BarStatus, Active as BarActive}
import aliased_variant_bug/foo.{type FooStatus, Active}
pub fn is_foo_active(s: FooStatus) -> Bool { s == Active }
pub fn is_bar_active(s: BarStatus) -> Bool { s == BarActive }
Generated aliased_variant_bug.mjs:
import * as $bar from "./aliased_variant_bug/bar.mjs";
import { Active as BarActive } from "./aliased_variant_bug/bar.mjs";
import * as $foo from "./aliased_variant_bug/foo.mjs";
import { Active } from "./aliased_variant_bug/foo.mjs";
export function is_foo_active(s) { return s instanceof Active; }
export function is_bar_active(s) { return s instanceof Active; } // wrong — should be BarActive