aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty
diff options
context:
space:
mode:
authorodersky <odersky@gmail.com>2017-04-09 16:28:56 +0200
committerGitHub <noreply@github.com>2017-04-09 16:28:56 +0200
commitb8bb34dd0ea68cfed09ed54604f659a787037d2d (patch)
tree3387b92f511c18fa91a8417b6b74a43d798e4a19 /compiler/src/dotty
parent4d76265fac7edafc2fcf29ce6873fdb252fbba0d (diff)
parentb159489576fc7afdee5b2d93e9465dbc87f8069e (diff)
downloaddotty-b8bb34dd0ea68cfed09ed54604f659a787037d2d.tar.gz
dotty-b8bb34dd0ea68cfed09ed54604f659a787037d2d.tar.bz2
dotty-b8bb34dd0ea68cfed09ed54604f659a787037d2d.zip
Merge pull request #2204 from dotty-staging/fix/i2201
Fix #2201: Less aggressive type application reduction for better inference
Diffstat (limited to 'compiler/src/dotty')
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeApplications.scala9
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
index 23c3f96cc..94b726491 100644
--- a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
+++ b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
@@ -391,9 +391,12 @@ class TypeApplications(val self: Type) extends AnyVal {
if (!args.exists(_.isInstanceOf[TypeBounds])) {
val followAlias = Config.simplifyApplications && {
dealiased.resType match {
- case AppliedType(tyconBody, _) =>
- sameLength(dealiased.typeParams, tyconBody.typeParams)
- // Reducing is safe for type inference, as kind arity of type constructor does not change
+ case AppliedType(tyconBody, dealiasedArgs) =>
+ // Reduction should not affect type inference when it's
+ // just eta-reduction (ignoring variance annotations).
+ // See i2201*.scala for examples where more aggressive
+ // reduction would break type inference.
+ dealiased.paramRefs == dealiasedArgs
case _ => false
}
}