@@ -249,21 +249,12 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
249249 val cls = mirroredType.classSymbol
250250 val accessors = cls.caseAccessors.filterNot(_.isAllOf(PrivateLocal ))
251251 val elemLabels = accessors.map(acc => ConstantType (Constant (acc.name.toString)))
252+ val nestedPairs = TypeOps .nestedPairs(accessors.map(mirroredType.resultType.memberInfo(_).widenExpr))
252253 val (monoType, elemsType) = mirroredType match
253254 case mirroredType : HKTypeLambda =>
254- def accessorType (acc : Symbol ) =
255- if cls.typeParams.hasSameLengthAs(mirroredType.paramRefs) then
256- acc.info.subst(cls.typeParams, mirroredType.paramRefs)
257- else
258- acc.info
259- val elems =
260- mirroredType.derivedLambdaType(
261- resType = TypeOps .nestedPairs(accessors.map(accessorType))
262- )
263- (mkMirroredMonoType(mirroredType), elems)
255+ (mkMirroredMonoType(mirroredType), mirroredType.derivedLambdaType(resType = nestedPairs))
264256 case _ =>
265- val elems = TypeOps .nestedPairs(accessors.map(mirroredType.memberInfo(_).widenExpr))
266- (mirroredType, elems)
257+ (mirroredType, nestedPairs)
267258 val elemsLabels = TypeOps .nestedPairs(elemLabels)
268259 checkRefinement(formal, tpnme.MirroredElemTypes , elemsType, span)
269260 checkRefinement(formal, tpnme.MirroredElemLabels , elemsLabels, span)
@@ -344,7 +335,7 @@ class Synthesizer(typer: Typer)(using @constructorOnly c: Context):
344335 (using Context ): Tree =
345336 if checkFormal(formal) then
346337 formal.member(tpnme.MirroredType ).info match
347- case TypeBounds (mirroredType, _) => synth(mirroredType.stripTypeVar , formal, span)
338+ case TypeBounds (mirroredType, _) => synth(TypeOps .stripTypeVars(mirroredType) , formal, span)
348339 case other => EmptyTree
349340 else EmptyTree
350341
0 commit comments