Skip to content

Scenario with Selectable, Tuple.Map, and named tuple, where field is not selectable #22645

Closed
@kavedaa

Description

@kavedaa

Compiler version

3.6.3, 3.7.0-RC1-bin-20250222-4dc4668-NIGHTLY

Minimized code

package bug

import scala.language.experimental.namedTuples

object ExhibitA:  //  fails

  class SelectableNT[N <: Tuple] extends Selectable:   
    def selectDynamic(name: String) = ???
    type Names = Tuple.Map[N, [X] =>> X] 
    type Fields = NamedTuple.NamedTuple[Names, (String, Int)]

  val x = new SelectableNT[("name", "age")]
  x.name  // fails


object ExhibitB:  //  works

  class SelectableNT[N <: Tuple] extends Selectable:   
    def selectDynamic(name: String) = ???
    type Fields = NamedTuple.NamedTuple[N, (String, Int)]

  val x = new SelectableNT[("name", "age")]
  x.name  


object ExhibitC:  // works

  class SelectableNT[N <: Tuple] extends Selectable:   
    def selectDynamic(name: String) = ???
    type Fields = NamedTuple.NamedTuple[N, (String, Int)]

  type N = ("name", "age")
  val x = new SelectableNT[N]
  x.name 


object ExhibitD:  // works

  class SelectableNT[N <: Tuple] extends Selectable:   
    def selectDynamic(name: String) = ???
    type Fields = NamedTuple.NamedTuple[N, (String, Int)]

  type N = ("name", "age")
  type Names = Tuple.Map[N, [X] =>> X]
  val x = new SelectableNT[Names]
  x.name


object ExhibitE:  // works

  type N = ("name", "age")
  type Names = Tuple.Map[N, [X] =>> X]

  class SelectableNT extends Selectable:   
    def selectDynamic(name: String) = ???
    type Fields = NamedTuple.NamedTuple[Names, (String, Int)]

  val x = new SelectableNT
  x.name

Output

[error] .\bug.scala:15:3
[error] value name is not a member of bug.ExhibitA.SelectableNT[(("name" : String), ("age" : String))]
[error]   x.name  // fails
[error]   ^^^^^^

Expectation

Successful compilation

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions