# Types and Types Systems concepts

Given this definitions about Types and Type systems :

Types are described by means of a language of type expressions:

• Basic or primitive types: Bool, Char, Int, ...

• Type variables: a, b, c, ...

• Type constructors: → (function), × (tuple), [ ] (list), ...

• Rules to build type expressions:

τ ::= Bool | Char | Int | ··· | t | τ → τ | τ × τ | [ τ ] | ···

• Types whose type expression contains no type variable are called monomorphic types or just monotypes.

• Types whose type expression contains variables are called polytypes or polymorphic types (parametric polymorphism)

• A polymorphic type represents an infinite number of monotypes

I'm trying to understand the last definition but i can't. A polymorphic type represents a infinite number of monoytpes, because in his type expression has a type variable ?

For example, the type $a \to a$ (which is a polymrphic type) represents
• Bool $\to$ Bool
• Char $\to$ Char
• (Char $\to$ Int) $\to$ (Char $\to$ Int)