[#660] | project: compiler | priority: low | category: bug | |
---|---|---|---|---|
submitter | assigned to | status | date submitted | |
Sean | Martin | noise | 2006-07-15 16:50:39.0 | |
subject | compatible types are listed as incompatible | |||
code |
package test; abstract class Test { abstract class A { type X <: XImpl; type Y <: X with YImpl; abstract class XImpl; abstract class YImpl extends XImpl; } type Z <: b.X with ZImpl; trait ZImpl extends b.YImpl; abstract class B extends A { type X <: XImpl; type Y = Z; trait XImpl extends super.XImpl; trait YImpl extends super.YImpl with XImpl; } val b : B; } |
|||
what happened | error overriding type Y in class A with bounds >: scala.All <: B.this.X with B.this.YImpl; type Y has incompatib\ le type test3/src/test test.scala line 14 1152966648865 11280 |
|||
what expected | Since b is an instance of B, I would expect that b.X : B.X and b.YImpl : B.YImpl; Or am I missing something here? | |||
[back to overview] |
Sean edited on 2006-07-15 16:50:54.0 |
Sean edited on 2006-07-21 07:39:09.0 |
Martin edited on 2006-07-24 17:46:32.0 |
No, this is a type error. The problem is that Z <: b.X but in class B we require Z <: B.this.X So it would be OK in the `b' instance but not in class `B' in general. If val b and class B are merged in a single object definition, this should work, I think. |