Generics

Generics are a concept to refer to many types at once, and to be polymorphic over them. Generics use the angle bracket syntax, which is common in many C-like languages.

An identifier that refers to many types is called a type parameter, a type variable or simply a generic type. A type, trait, function or  block with a type parameter is called generic. Strictly speaking, types, traits, functions and  blocks with a lifetime are also generic. For functions, this isn't always visible, since lifetimes are often elided.

Example
This example illustrates where generics can be used. The identifier  is used as type parameter, which is common practice in Rust. Each type parameter must be declared before it can be used:

Bounds
Type parameters and lifetimes can be bounded by traits and by lifetimes. Bounds appear after a colon after the parameter and are separated with a   sign. It is possible to move bounds to a  clause:

Usage
When using a generic trait or type, its type parameters must be substituted with concrete types or with new type parameters.

TODO