Functional Programming (FP) is a paradigm in software development that uses pure functions to build software. Some of the key concepts in functional programming are immutability, referential transparency, pattern matching, function composition, lazy evaluation and so on.
Functional programming makes it easier to reason about a piece of code. It makes testing and troubleshooting easier as the mutable states are largely avoided.
Scala brings the power of functional programming into the JVM. In this series, we discuss about the various functional programming concepts and libraries in Scala.

Functional Programming Basic Concepts
- Introduction to Functional Programming in Scala
- Functions in Scala
- Functions and Methods in Scala
- Lifting in Scala
- A Comprehensive Guide to For-Comprehension in Scala
- Lambda Expressions in Scala
- Currying in Scala
- Partial Functions in Scala
- Function Composition in Scala
- Apply Method In Scala
- Higher-Order Functions in Scala
- Tail Recursion in Scala
- Type Classes in Scala
- Pattern Matching in Scala
- Algebraic Data Types in Scala

Cats Ecosystem
- Introduction to Cats
- Introduction to Cats Effects
- Introduction to FS2: Functional Streams for Scala
- Resource Handling In Cats Effect
- Introduction to Concurrent Programming With Cats Effect Fibers
- Difference Between flatMap(), flatTap(), evalMap() and evalTap() in Cats Effect
- Difference Between delay, defer, and deferred in Cats Effect
- Introduction to http4s