aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/TypeApplications.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-07-21 18:31:32 +0200
committerMartin Odersky <odersky@gmail.com>2015-09-18 18:12:16 +0200
commit4148970a984de945c69f345381f0f03e84d7d6c2 (patch)
tree7b9427efb6604eebb5fa2ad503feb75592122007 /src/dotty/tools/dotc/core/TypeApplications.scala
parent4aa1d5e1d9e4edfc1df6161504861840b24687ae (diff)
downloaddotty-4148970a984de945c69f345381f0f03e84d7d6c2.tar.gz
dotty-4148970a984de945c69f345381f0f03e84d7d6c2.tar.bz2
dotty-4148970a984de945c69f345381f0f03e84d7d6c2.zip
Generalize eta reduction to partially applied types.
Now also allows to reduce something like ([T] => Map[T, String]) to Map[_, String]
Diffstat (limited to 'src/dotty/tools/dotc/core/TypeApplications.scala')
-rw-r--r--src/dotty/tools/dotc/core/TypeApplications.scala8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/TypeApplications.scala b/src/dotty/tools/dotc/core/TypeApplications.scala
index 062867353..5d856495b 100644
--- a/src/dotty/tools/dotc/core/TypeApplications.scala
+++ b/src/dotty/tools/dotc/core/TypeApplications.scala
@@ -506,9 +506,12 @@ class TypeApplications(val self: Type) extends AnyVal {
tp.refinedInfo match {
case TypeAlias(TypeRef(RefinedThis(rt), rname))
if (rname == tparam.name) && (rt eq self) =>
+ // todo: add bounds
etaCore(tp.parent, otherParams)
case _ =>
- NoType
+ val pcore = etaCore(tp.parent, tparams)
+ if (pcore.exists) tp.derivedRefinedType(pcore, tp.refinedName, tp.refinedInfo)
+ else NoType
}
case _ =>
NoType
@@ -518,7 +521,8 @@ class TypeApplications(val self: Type) extends AnyVal {
case self @ RefinedType(parent, tpnme.hkApply) =>
val lc = parent.LambdaClass(forcing = false)
self.refinedInfo match {
- case TypeAlias(alias) if lc.exists => etaCore(alias, lc.typeParams.reverse)
+ case TypeAlias(alias) if lc.exists =>
+ etaCore(alias, lc.typeParams.reverse)
case _ => NoType
}
case _ => NoType