Referring to the type of an inner class in Scala
inner-classes, scala, types
Solution
I suppose the type Inner is like the type this.Inner. Outer#Inner is independent of the outer instance (not a path-dependent type).
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Outer#Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
Problem
The following code tries to mimic Polymorphic Embedding of DSLs: rather than giving the behavior in `Inner`, it is encoded in the `useInner` method of its enclosing class. I added the `enclosing` method so that user has only to keep a reference to `Inner` instances, but can always get their enclosing instance. By doing this, all `Inner` instances from a specific `Outer` instance are bound to only one behavior (but it is wanted here). ``` abstract class Outer { sealed class Inner { def enclosing = Outer.this } def useInner(x:Inner) : Boolean } def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x) ``` It does not compile and scala 2.8 complains about: ``` type mismatch; found: sandbox.Outer#Inner required: _81.Inner where val _81:sandbox.Outer ``` From Programming Scala: Nested classes and A Tour of Scala: Inner Classes, it seems to me that the problem is that `useInner`expects as argument an `Inner` instance from a specific `Outer` instance. What is the true explanation and how to solve this problem ?