Non-singleton self-types for Scala