Training | Functional domain modeling

Use the power of functional programming to make your business domain strict, accurate, and reliable and learn about features like Union and Refined types.



Data modeling is not as simple of a process as it might look. Approaches to code like DDD (domain driven design) are completely based on working consciously over our domain entities to represent the business reliably. In this short course, you will learn how to model your domain data using the tools and concepts that Functional Programming brings to the table.


  • Previous experience with Kotlin.
  • IntellIJ IDEA, JDK 8.

What you'll learn

  • The power of the Kotlin type system for data modeling. Nothing and Unit.
  • Modeling domain entities with algebraic data types (ADTs). Product and sum types.
  • Structural syntax derived at compile time for product types.
  • Union types.
  • Modeling errors in our domain using coproduct types.
  • Modeling domain behaviors (business logic) as pure functions.
  • Modeling domain behaviors (business logic) as ADTs (algebras).
  • Functional data types for representing concerns over over our data.
  • Leveraging immutability within our domain.
  • Using optics to read and modify immutable domain data.
  • Refining our domain types for a more precise representation of the business elements.
  • Removing the need for testing invariants with refined types.
  • Inline classes.
  • Referential transparency and purity across all our domain.
  • Determinism.


This Functional Domain Modeling includes:

  • Maximum Class Size of 15
  • Access to Academy EduTools Platform
  • Access to Course Materials
  • Certificate of Completion
  • Access to a Private Channel with Trainers in the Academy Slack
  • A Q&A session one week post-course
  • A pre-and-post meeting with our trainers