Skip to content

Extension method with dependent type bounds #19197

Open
@nicolasstucki

Description

@nicolasstucki

Compiler version

3.3.1

Minimized code

extension (tuple: Tuple)
  def *:[T >: tuple.type <: Tuple, H](x: H): H *: T = ???

Output

2 |  def `*:`[T >: tuple.type <: Tuple, H](x: H): H *: T = ???
  |                ^^^^^
  |                Not found: tuple - did you mean Tuple?

The issue seems to come from how we handle type parameters

[[syntax trees at end of                     typer]]
    extension [T >: tuple.type <: Tuple, H >: Nothing <: Any](tuple: Tuple)
      def *:(x: H): *:[H, T] = ???

It should be the same as in

extension (tuple: Tuple)
  def ok[T >: tuple.type <: Tuple, H](x: H): H *: T = ???
[[syntax trees at end of                     typer]]
    extension (tuple: Tuple) def ok[T >: tuple.type <: Tuple,
      H >: Nothing <: Any](x: H): *:[H, T] = ???

Expectation

Should compile

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions