From e18713fe5196212e178ac78ffa41a4b4a35c423b Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 9 May 2021 12:15:05 +0200 Subject: [PATCH] Allow for ranges in parameters of mapped lambda types Fixes #12384 --- compiler/src/dotty/tools/dotc/core/Types.scala | 7 ++++++- tests/neg/i12384.scala | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/neg/i12384.scala diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index e9f5f48eb24b..ea26550fb597 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -5640,7 +5640,12 @@ object Types { case Range(lo, hi) => range(derivedLambdaType(tp)(formals, lo), derivedLambdaType(tp)(formals, hi)) case _ => - tp.derivedLambdaType(tp.paramNames, formals, restpe) + if formals.exists(isRange) then + range( + derivedLambdaType(tp)(formals.map(upper(_).asInstanceOf[tp.PInfo]), restpe), + derivedLambdaType(tp)(formals.map(lower(_).asInstanceOf[tp.PInfo]), restpe)) + else + tp.derivedLambdaType(tp.paramNames, formals, restpe) } protected def reapply(tp: Type): Type = apply(tp) diff --git a/tests/neg/i12384.scala b/tests/neg/i12384.scala new file mode 100644 index 000000000000..fef2ce018ee3 --- /dev/null +++ b/tests/neg/i12384.scala @@ -0,0 +1,8 @@ +object Nats { + trait Fold { + trait Nat + } + type Inc = Fold { + type Apply[N <: Nat] = Succ // error + } +} \ No newline at end of file