Introduction
Traits let you define shared behavior that different types can use. It's like a promise that a type will have certain abilities.
When you want different types to have the same set of actions.
When you want to write code that works with many types in a similar way.
When you want to organize your code by grouping related functions.
When you want to add new behavior to types without changing their code.