Speaker

Merlin Pahic

Merlin Pahic

Staff Software Engineer at EIDU, a social enterprise dedicated to improving learning outcomes for children in low-resource settings worldwide.

Berlin, Germany

Actions

Staff Software Engineer at EIDU, a social enterprise dedicated to improving learning outcomes for children in low-resource settings worldwide. Experienced in full-stack development, including on the Android platform. As an engineer, I'm passionate about functional programming, static typing and property-based testing. As a human, I am dedicated to improving learning outcomes and opportunities for children all around the world.

Area of Expertise

  • Government, Social Sector & Education
  • Information & Communications Technology

Topics

  • Kotlin
  • Android Software Development
  • elm
  • Kotlin Multiplatform
  • Software Engineering

Playing with types: An experimental structural type system for Kotlin

Kotlin's powerful static type system is based on nominal typing – let's explore how we might implement structural typing by leveraging Kotlin and the Gradle build system.

When comparing type systems in different languages, one of the fundamental distinctions is between nominal and structural typing.
- In nominal typing, types are considered equal when they have the same (qualified) name – Kotlin's type system is based on nominal typing.
- In structural typing, types are considered equal when they have the same structure – TypeScript is a prominent example of structural typing.
It is worth noting that some statically typed languages, like Elm, support both.

Structural typing provides some extra flexibility, as types can be deemed compatible without explicitly implementing a common interface. That way, types of the same shape defined in different, unrelated codebases can be compatible without introducing a dependency. Also, functionality that depends on the shape of a type may accept any type matching that shape, facilitating code reuse.

In this talk, we'll explore an implementation of structural typing in Kotlin – as an experiment, based on existing language features.

We'll start by considering the differences between nominal and structural typing, their pros and cons and some use cases. Then we'll look at some type theory, specifically algebraic data types (ADTs) and how they are implemented through nominal/structural typing respectively. We'll also look at how this relates to Kotlin's `typealias` feature and the implications for type safety. Finally, I will take you through an implementation of structural typing, leveraging features of the Kotlin programming language and the Gradle build system.

Local-First App Development with Event Sourcing: A Functional Approach in Kotlin

In an increasingly connected world, applications often rely on constant internet access. But what happens when connectivity is unreliable or expensive? Local-first app development focuses on maintaining local state to ensure reliable and seamless offline experiences.
This talk explores how functional programming patterns, event sourcing, and Kotlin enable scalable and resilient local-first applications. Using EIDU’s learning platform as a case study — an educational app used in low and middle-income countries — we will showcase how event-driven architectures support offline-first experiences while maintaining strong consistency when syncing with the cloud.

Livecoding soundscapes with Compose Multiplatform

Compose Multiplatform allows for the creation of beautiful user interfaces in a declarative, functional paradigm. But the Compose compiler isn't limited to creating UI or even visuals.

In this talk, we explore using the Compose compiler to create soundscapes and other pieces of music. I will present a library and domain-specific language (DSL) for musical composition – complete with a plugin to turn IntelliJ into a livecoding environment.

We'll start by looking at the building blocks of musical compositions and how Kotlin and Compose Multiplatform can be used to implement them in a declarative and functional way. This includes tone generators/synths, shaping the envelope of a sound, playing samples, expressing various timings and simultaneously playing multiple tracks, and creating a drum machine. We'll also see how a powerful DSL allows us to more conveniently express complex rhythms.

Following that, we'll look at how to implement the audio generation backend on multiple platforms, and some ways to optimise the Compose code – the precise timings required for music present a particular challenge. We'll also see how the audio generation integrates with existing Compose components, and how to create enlightening visualisations of the code and music.

Finally we'll look at how to turn IntelliJ into a livecoding environment, allowing the creation and modification of musical pieces on the fly. This enables experimentation and improvisation for any programmer or musician.

WeAreDevelopers World Congress 2026 - Europe Sessionize Event Upcoming

July 2026 Berlin, Germany

KotlinConf 2026 Sessionize Event

May 2026 Munich, Germany

Lambda Days 2025 Sessionize Event

June 2025 Kraków, Poland

Merlin Pahic

Staff Software Engineer at EIDU, a social enterprise dedicated to improving learning outcomes for children in low-resource settings worldwide.

Berlin, Germany

Actions

Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.

Jump to top