Closed
Description
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.