This document discusses various techniques for working with types in Scala, including: 1. The main alternatives for Scala types including classical OO, algebraic, generic, and structured types. It recommends choosing styles based on use cases and setting guidelines. 2. The differences between run-time and compile-time dispatch and how they are implemented in Scala. 3. Techniques for working with types including tagged types, type aliases, and implicit evidence to provide different behaviors based on types known at compile-time. 4. Resources for learning more about advanced type-level programming in Scala, particularly the Shapeless library.