# Generic Types, Traits, and Lifetimes


# Generics
A tools for effectively handling the duplication of concepts.

One of these tools is *generics*

They are abstract stand-ins for concrete types or other properties

We can express the behavior of generics or how they relate to other generics without knowing what type that will be in place when copiling and running the code.

Functions can either take parameters of some generic type or a concrete type (like a `i32` or `String`) in the same way they take parameters with unknwon values to run the same code on multiple concrete values

One examle where concrete values were already used was with `Option<T>`, `Vec<T>`, `HashMap<K, V>` and `Result<T, E>`

This chapter covers 3 things
1. [Reducing Code duplication](Reducing Code Duplication.md)
1. [Generics](Generics.md)
1. [Traits](Traits.md)
1. [Lifetimes](Lifetimes.md)