# Notes - Imperative Programming TT23, Type variance

### Flashcards

What does the notation

```
A <: B
```

mean in Scala?

```
A <: B
```

$A$ is a subtype of $B$.

What is the notation for a covariant type $T$ in Scala?

```
+T
```

What is the notation for a contravariant type $T$ in Scala?

```
-T
```

What does it mean for a type to be invariant?

It is neither covariant or contravariant.

What does it mean for a type $T$ to be covariant?

Whenever `A <: B`

, we have `T[A] <: T[B]`

.

What does it mean for a type $T$ to be contravariant?

Whenever `A <: B`

, we have `T[B] <: T[A]`

.

Can you state the Liskov substitution principle?

If `S <: T`

then everything you can do with a value of type `T`

, you should also be able to do with a value of type `S`

.