gleam-lang/gleam

Equality with an aliased variant silently returns False on JavaScript

Geschlossen

#5.757 geöffnet am 27.05.2026

 (2 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Rust (960 Forks)batch import
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: javascript only — 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

Contributor Guide