Починаючи з версії 2.5, Scala підтримує поліморфізм конструктора типу (type constructor polymorphism). Це означає, що параметри типу, можуть самі мати параметри типу. Крім того, аргументи цих конструкторів типів можуть бути обмежені. Scala є першою практичною мовою, щоб об'єднала типи вищого виду (higher-kinded types) і підтипи.

trait Iterable[T] { def filter(p: T => Boolean): Iterable[T] def remove(p: T => Boolean): Iterable[T] = filter (x => !p(x))

trait List[T] extends Iterable[T] { def filter(p: T => Boolean): List[T] override def remove(p: T => Boolean): List[T] = filter (x => !p(x))

Визначення тип вертаємого значення приводить до дублювання коду у List

Той самий код із поліморфізмом конструктора типу trait Iterable[T, Container[X]] { def filter(p: T => Boolean): Container[T] def remove(p: T => Boolean): Container[T] = filter (x => !p(x))

trait List[T] extends Iterable[T, List]

Джерело

http://code.google.com/p/kinded-scala/ Adriaan Moors, Frank Piessens, Martin Odersky: Generics of a Higher Kind