Нет. Это как раз задача для применения классического полиморфизма. Пересечение типов нужно скорее для того, чтобы например ограничить диапазон принимаемых типов в аргументе функции для классов, которые не имеют общего супертипа.
42 в выражении A(42) является параметром конструктора. Запись
def f(x: A(42)) = ...
является некорректной, так как типом может являться только A. Для параметризации типов используются квадратные скобки. Подробнее тему параметризации типов я раскрыл в разделе про лямбда выражения для типов.
Можно, если trait A и константа a определены в одной области видимости, например так:
object Test {
val a: Int = 42
trait A(val i: Int)
class C extends A(a)
}
Если же trait A(i: Int) определен где-то в другом месте — то нет.
По сути, объединение типов так или иначе уже было где-то рядом, например тип Either, или Coproduct из shapeless. Теперь же они будут поддерживаться из коробки, и, в качестве бонуса, их сделали ближайшим супертипом)
Тут уж смотря с какой стороны посмотреть. Мне кажется, что у архитекторов «Scala» вызывает ассоциации с лестничными пролетами, а у ценителей оперы — со всемирно известным театром в Милане.
Если же trait A(i: Int) определен где-то в другом месте — то нет.