@@ -427,13 +427,25 @@ class QuoteMatcher(debug: Boolean) {
427
427
notMatched
428
428
case _ => matched
429
429
430
+ def matchTypeParams (ptparams : List [TypeDef ], scparams : List [TypeDef ]): optional[MatchingExprs ] =
431
+ // TODO-18271: Compare type bounds
432
+ val ptsyms = ptparams.map(_.symbol)
433
+ val scsyms = scparams.map(_.symbol)
434
+ ctx.gadtState.unifySyms(ptsyms, scsyms)
435
+ matched
436
+
430
437
def matchParamss (scparamss : List [ParamClause ], ptparamss : List [ParamClause ])(using Env ): optional[(Env , MatchingExprs )] =
431
438
(scparamss, ptparamss) match {
432
439
case (scparams :: screst, ptparams :: ptrest) =>
433
- val mr1 = matchLists(scparams, ptparams)(_ =?= _)
434
- val newEnv = summon[Env ] ++ scparams.map(_.symbol).zip(ptparams.map(_.symbol))
435
- val (resEnv, mrrest) = withEnv(newEnv)(matchParamss(screst, ptrest))
436
- (resEnv, mr1 &&& mrrest)
440
+ (scparams, ptparams) match
441
+ case (TypeDefs (scparams), TypeDefs (ptparams)) =>
442
+ (summon[Env ], matchTypeParams(scparams, ptparams))
443
+ case (ValDefs (scparams), ValDefs (ptparams)) =>
444
+ val mr1 = matchLists(scparams, ptparams)(_ =?= _)
445
+ val newEnv = summon[Env ] ++ scparams.map(_.symbol).zip(ptparams.map(_.symbol))
446
+ val (resEnv, mrrest) = withEnv(newEnv)(matchParamss(screst, ptrest))
447
+ (resEnv, mr1 &&& mrrest)
448
+ case _ => notMatched
437
449
case (Nil , Nil ) => (summon[Env ], matched)
438
450
case _ => notMatched
439
451
}
0 commit comments