Scala/Поліморфізм конструктора типу
Зовнішній вигляд
< Scala
Починаючи з версії 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