rescript-lang / rescript-compiler

The compiler for ReScript.
https://rescript-lang.org
Other
6.75k stars 449 forks source link

Match on variant spread in switch #6562

Closed jacobp100 closed 1 month ago

jacobp100 commented 10 months ago

Since the new ReScript allows spreading variants in the definitions, should we also be able to match them like polymorphic variants?

Polymorphic variants
type ex1A = [#X | #Y]
type ex1B = [#Z]
type ex1 = [ex1A | ex1B]

let ex1 = (x: ex1) =>
  switch x {
  | #...ex1A => "A"
  | #...ex1B => "B"
  }
Variants with spread
type ex2A = X | Y
type ex2B = Z
type ex2 = | ...ex2A | ...ex2B

let ex2 = (x: ex2) =>
  switch x {
  | _ => "???"
  }
zth commented 10 months ago

It'd definitely be great. Related: https://github.com/rescript-lang/rescript-compiler/discussions/6273#discussioncomment-6645282