I want my trait Outer
to have two abstract member types Inner1
and Inner2
. I want Inner2
to have abstract member type Inner1
also. I want to put a requirement that Outer#Inner1
is equal to Inner2#Inner1
. What is the most conviniet way to do this? So far I have
trait HaveInner1 {
type Inner1
}
trait Outer {
type Inner1
type Inner2 <: HaveInner1
// require Inner1 == Inner2#Inner1;
def ?[T](implicit v: T): T = v
implicit var ev: Inner2#Inner1 =:= Inner1 = ?[Inner2#Inner1 =:= Inner1]
}
The last two statements is not that pretty. Are there more idiomatic way to the same things?
trait HaveInner1 {
type Inner1
}
trait Outer /*extends HaveInner1*/ { outer =>
type Inner1
type Inner2 <: HaveInner1 { type Inner1 = outer.Inner1 }
}