This document discusses refactoring design patterns to use functional programming principles in Scala. It begins with definitions of functional programming and examples of implementing immutability using case classes. Higher order functions and pure functions without side effects are demonstrated. Common design patterns like builder, strategy, and chain of responsibility are explained from an object oriented perspective and examples are provided of implementing them functionally in Scala. Dependency injection is also covered with examples of constructor injection in vanilla Scala and using the cake pattern. The document concludes with information about the presenter and a request for questions.