Впервые в Скала. Язык довольно лаконичен.
Любопытно, почему для реализации нескольких признаков требуется несколько операторов "with".
Например:
class Foo extends Bar with A with B with C {}
против
class Foo extends Bar with A, B, C {}
Учитывайте это
class Foo[A, B] new Foo[Bar with D with E, Bar with E] {}
new Foo[Bar with D, E, Bar with E] {}
Это не всегда однозначно во всех случаях.