aboutsummaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2017-03-16 19:36:38 +0100
committerGuillaume Martres <smarter@ubuntu.com>2017-03-16 20:02:39 +0100
commit675892a4aaa77a4e71faa6057b4a0a059acb408d (patch)
treec1dc2fdac6dc67c8f4b933d7e91369349114105b /compiler
parent96c6d38649d0f1605a31f542a53509d57af79709 (diff)
downloaddotty-675892a4aaa77a4e71faa6057b4a0a059acb408d.tar.gz
dotty-675892a4aaa77a4e71faa6057b4a0a059acb408d.tar.bz2
dotty-675892a4aaa77a4e71faa6057b4a0a059acb408d.zip
Reduce type lambdas even if variance changes
Previously, the added testcase failed with (when running with -Ydebug-alias): 2 | def foo = Seq(a) | ^ |covariant type A occurs in invariant position in type => Seq.CC[Cov.this.A] of method foo Because the type parameter of `CC` is invariant. Of course, this is fine because `CC[A]` can be reduced to `Seq[A]`, but before this commit, `TypeApplications#appliedTo` used to disallow reductions that replaced an invariant type parameter with a variant one. I believe that for type inference, only preserving the arity is important, so I removed this restriction.
Diffstat (limited to 'compiler')
-rw-r--r--compiler/src/dotty/tools/dotc/core/TypeApplications.scala7
1 files changed, 4 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
index c713cd542..ba3e6a461 100644
--- a/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
+++ b/compiler/src/dotty/tools/dotc/core/TypeApplications.scala
@@ -1,4 +1,5 @@
-package dotty.tools.dotc
+package dotty.tools
+package dotc
package core
import Types._
@@ -412,8 +413,8 @@ class TypeApplications(val self: Type) extends AnyVal {
val followAlias = Config.simplifyApplications && {
dealiased.resType match {
case AppliedType(tyconBody, _) =>
- variancesConform(typParams, tyconBody.typeParams)
- // Reducing is safe for type inference, as kind of type constructor does not change
+ sameLength(dealiased.typeParams, tyconBody.typeParams)
+ // Reducing is safe for type inference, as kind arity of type constructor does not change
case _ => false
}
}