Skip to content

top level extension method dealiases opaque type in result type #18097

Closed
@artembakhanov

Description

@artembakhanov

Compiler version

3.3.0

Minimized code

opaque type PositiveNumber = Double

object PositiveNumber:
  extension (x: PositiveNumber)
    def mult1(other: PositiveNumber): PositiveNumber =
      x * other

extension (x: PositiveNumber)
  def mult2(other: PositiveNumber): PositiveNumber =
    x * other

object Test:
  def multMap1[A](x: Map[A, PositiveNumber], num: PositiveNumber): Map[A, PositiveNumber] = x.map((key, value) => key -> value.mult1(num)).toMap

  def multMap2[A](x: Map[A, PositiveNumber], num: PositiveNumber): Map[A, PositiveNumber] = x.map((key, value) => key -> value.mult2(num)).toMap
  def multMap2_2[A](x: Map[A, PositiveNumber], num: PositiveNumber): Map[A, PositiveNumber] = x.map((key, value) => key -> mult2(value)(num)).toMap

Output

[error] ./foo.scala:15:145
[error] Cannot prove that (A, Double) <:< (A, V2).
[error] 
[error] where:    V2 is a type variable with constraint <: PositiveNumber
[error]   def multMap2[A](x: Map[A, PositiveNumber], num: PositiveNumber): Map[A, PositiveNumber] = x.map((key, value) => key -> value.mult2(num)).toMap
[error]

Expectation

I would expect both functions be defined without type error. For some reason, when an opaque type is not a top-level definition, there is no type error when defining these functions.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions