Functional programming is in fashion today even though it has been around since the 1940s. We will look at the principles of functional programming and how they can applied with Kotlin. Functional programming has many techniques such as composition, currying and partial application. It also provides structures such as Monads. How do we apply these techniques and structures with Kotlin? Kotlin is not a purely functional language like Haskell. It is a multi-paradigm language. But, we will see how we could build reusable functional constructs in Kotlin that languages like Haskell provide. Even though Android and Backend apps are written following an OOP paradigm, you could still apply many of the techniques of functional programming to build consistent and testable applications.