diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2017-03-16 19:36:38 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2017-03-16 20:02:39 +0100 |
commit | 675892a4aaa77a4e71faa6057b4a0a059acb408d (patch) | |
tree | c1dc2fdac6dc67c8f4b933d7e91369349114105b /compiler/src/dotty | |
parent | 96c6d38649d0f1605a31f542a53509d57af79709 (diff) | |
download | dotty-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/src/dotty')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/TypeApplications.scala | 7 |
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 } } |