gleam-lang/gleam
Equality with an aliased variant silently returns False on JavaScript
已關閉
#5,757 建立於 2026年5月27日
help wantedhigh priority
倉庫指標
- 星標
- (21,417 顆星)
- PR 合併指標
- (平均合併 10天 19小時) (30 天內合併 69 個 PR)
描述
- 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