Ответ 1
Я нашел ответ в одном из "связанных вопросов", предложенных SO (который имел несвязанный заголовок: -):
sealed trait AorB
trait A extends AorB { def apiA:... }
trait B extends AorB { def apiB:... }
trait C { this: AorB => }
Изменить
Я использую это, чтобы иметь некоторый король декартова произведения типов:
sealed trait CorD { this: AorB => }
trait C extends CorD { this: AorB => def apiC:... }
trait D extends CorD { this: AorB => def apiD:... }
// the "this: AorB =>" need to be repeated
Итак (в других файлах снова), мы можем определить:
case class AwithC extends A with C {
def apiA:....
def apiC:....
}
И так далее с любой комбинацией AorB x CorD