Many programming languages offer strong static typing. Scala takes this a bit further and provides you with a Turing complete type system. This allows the programmer to express and enforce many constraints at compile time rather than at run time. This presentation will show you how to leverage Scala’s type system to create type-safe data structures that are impossible in many other statically typed languages. We will explore heterogenous lists, coproducts (also called union types), dependant types, and other concepts. Finally, practical applications of shapeless will be examined.