Training | FP Fundamentals with Kotlin and Arrow

Training about how to learn Functional Programming essentials from scratch using Arrow.

16 Hours


This course provides an introduction to Functional Programming concepts in Kotlin using the Arrow library.


One year of experience using Kotlin or similar FP-oriented languages

What you'll learn

In this course, you will learn FP concepts from scratch, such as modeling data using algebraic data types, using error handling, and data validation using Kotlin and Arrow. Additionally, you will gain a deep understanding of Higher-Kinded Types and immutable data, as well as optics concepts and Polymorphic Error Handling. Finally, you will learn common programming patterns with the core functional type classes and be able to work with effects.

What is Functional Programming?

  • Introduction to Functional Programming in Kotlin
  • Pure Functions
  • Referential Transparency
  • The Substitution Model
  • Higher Order Functions

Domain modeling with Algebraic Data Types

  • Data classes and product types
  • Sealed classes and co-product types

Basic Error Handling and Data validation

  • Option
  • Try
  • Either
  • Fail Fast and Error accumulating Failure modes

Working with Immutable Data with Optics

  • Focusing on deeply nested data with Lens, Prism, and Optional
  • Removing boilerplate with the Optics DSL

Higher-Kinded Types

  • What are Higher-Kinded Types?
  • Introduction to polymorphic programs
  • Polymorphic functions
  • Generalized Algebraic Data Types

Programming with the core functional type classes

  • Modeling Generic Behaviors with Type Classes
  • Transforming data with Functor
  • Independent computations with Applicative
  • Dependent Computations with Monad
  • Folding structures into summary values with Foldable
  • Traversing nested effects
  • Lawful and Lawless instances

Working with Effects

  • Dependency Injection alternative with Reader, Kleisli, Extension Functions
  • Removing Callback-Hell and nested lambdas
  • The rise of Tagless Final
  • Suspending side effects for deferred evaluation
  • Safe resource acquisition and release
  • Integrating with third-party sync and async libraries
  • Testing Effectful Tagless Final programs

Polymorphic Error Handling

  • Modeling and raising errors
  • Fail Fast and Error Accumulating strategies with ApplicativeError and MonadError

Are you interested in scheduling this training for your company?

Contact us

Are you interested in attending a public training course?

Contact us

Alexandru Simonescu

“I’ve been developing software for more than ten years, and I think that learning functional programming through this training opened my mind and gave me more tools to solve my daily tasks in a more efficient way.”

Ilia Berlana

“This training was amazing. It gave me a new point of view about programming. I’ve been programming in Java for ten years in the backend on Android, and my next challenge is Kotlin, and this training helped me a lot.”

Juan Carlos García

“I’m very happy because I learned a lot, and I got some new tools I can use in my work day-to-day.”