Damian Lattenero
03/23/2026, 9:35 PM.ap = parallel (<*>), .flatMap = sequential (>>=), the code shape is the execution plan. Includes side-by-side comparisons with raw coroutines and Arrow, JMH benchmarks.
Article: https://dev.to/damian_lattenero/i-applied-haskells-applicative-functors-to-kotlin-coroutines-heres-what-happened-l06
GitHub: https://github.com/damian-rafael-lattenero/coroutines-applicatives
Would love feedback on the API shape especially from anyone who's used Haskell's Applicative in other contexts.ephemient
03/24/2026, 4:08 AM<*> isn't necessarily "parallel"; it's still sequential in IOephemient
03/24/2026, 4:16 AMval ctx = awaitAllAndTransform(
async { fetchProfile(userId) },
async { fetchPreferences(userId) },
async { fetchTier(userId) },
) { profile, preferences, tier ->
UserContext(profile, preferences, tier)
}Damian Lattenero
03/29/2026, 6:32 PMsimon.vergauwen
04/24/2026, 11:31 AMparZip.
val ctx = parZip(
{ fetchProfile(userId) },
{ fetchPreferences(userId) },
{ fetchTier(userId) },
) { profile, preferences, tier ->
UserContext(profile, preferences, tier)
}