Consider:
sealed trait A case object B extends A case object C extends A case object D extends A sealed trait Test { type AA <: A val aa: AA } objec