top
|
COMP 402: Production Programming
←
Scala Inheritance and the Scala Type System
→
|
Scala Types
Definitions
Here are some definitions of terms we used in class today. The definitions are quoted from the glossary of Programming in Scala, 1st ed.
- Currying
- A way to write functions with multiple parameter lists. For instance def f(x: Int)(y: Int) is a curried function with two parameter lists. A curried function is applied by passing several arguments lists, as in: f(3)(4). However, it is also possible to write a partial application of a curried function, such as f(3).
- Contravariant
- A contravariant annotation can be applied to a type parameter of a class or trait by putting a minus sign (-) before the type parameter. The class or trait then subtypes contravariantly with-in the opposite direction as-the type annotated parameter. For example, Function1 is contravariant in its first type parameter, and so Function1[Any, Any] is a subtype of Function1[String, Any].
- Covariant
- A covariant annotation can be applied to a type parameter of a class or trait by putting a plus sign (+) before the type parameter. The class or trait then subtypes covariantly with-in the same direction as-the type annotated parameter. For example, List is covariant in its type parameter, so List[String] is a subtype of List[Any].
- Type Parameter
- A parameter to a generic class or generic method that must be filled in by a type. For example, class List is defined as "class List[T] { ...", and method identity, a member of object Predef, is defined as "def identity[T](x:T) = x". The T in both cases is a type parameter.
- Type Signature
- A method's type signature comprises its name, the number, order, and types of its parameters, if any, and its result type. The type signature of a class, trait, or singleton object comprises its name, the type signatures of all of its members and constructors, and its declared inheritance and mixin relations.
Covariance/Contravariance Example
Here is a nice example of covariance/contravariance from the Programming in Scala book:
http://www.artima.com/pins1ed/type-parameterization.html#lst:function-variance
←
Scala Inheritance and the Scala Type System
→
URL: http://www.cs.rice.edu/~javaplt/402/12-spring/lectures/scala4/index.shtml