Skip to content

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

@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