gleam-lang/gleam
Equality with an aliased variant silently returns False on JavaScript
クローズ
#5,757 opened on 2026/05/27
help wantedhigh priority
Repository metrics
- Stars
- (21,417 個のスター)
- PR merge metrics
- (平均マージ 10d 19h) (30d で 69 merged PRs)
説明
- 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