Skip to content

Cannot call overloaded method variant with context function parameter #16506

Closed
@prolativ

Description

@prolativ

Compiler version

3.2.1

Minimized code

import scala.annotation.targetName

trait Ctx

def foo(f: Ctx => Int) = ???

@targetName("fooContextual")
def foo(f: Ctx ?=> Int) = ???

def bar1 = foo(ctx => 123)
def bar2 = foo((ctx: Ctx) => 123)
def bar3 = foo(ctx ?=> 123)
def bar4 = foo((ctx: Ctx) ?=> 123)
def bar5 = foo(123)

Output

[error] Tmp.scala:14:16: Found:    (Ctx) ?=> Int
[error] Required: Ctx => Int
[error] def bar3 = foo(ctx ?=> 123)
[error]                ^^^^^^^^^^^
[error] Tmp.scala:15:16: Found:    (Ctx) ?=> Int
[error] Required: Ctx => <?>
[error] def bar4 = foo((ctx: Ctx) ?=> 123)
[error]                ^^^^^^^^^^^^^^^^^^
[error] Tmp.scala:16:16: Found:    (123 : Int)
[error] Required: Ctx => <?>
[error] def bar5 = foo(123)
[error]                ^^^

Expectation

This should compile as the compiler has enough information to know which overloaded method variant to use.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions