Skip to content

Parameter substitution for reach capabilities not working #20202

Closed
@Linyxus

Description

@Linyxus

Compiler version

main

Minimized code

import language.experimental.captureChecking

trait Source[+T]

def race[T](sources: Seq[Source[T]^]): Source[T]^{sources*} = raceImpl(sources)

def raceImpl[T](sources: Seq[Source[T]^]): Source[T]^{sources*} = ???

Output

-- [E007] Type Mismatch Error: issues/source.scala:5:70 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5 |def race[T](sources: Seq[Source[T]^]): Source[T]^{sources*} = raceImpl(sources)
  |                                                              ^^^^^^^^^^^^^^^^^
  |                                                              Found:    Source[box T^?]^{sources*}
  |                                                              Required: Source[T]^{sources²*}
  |
  |                                                              where:    sources  is a reference to a value parameter
  |                                                                        sources² is a parameter in method race
  |
  | longer explanation available when compiling with `-explain`
1 error found

Expectation

Should compile.

Found by @natsukagami while capture checking gears.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions