// Created on savesnippets.com · https://savesnippets.com/pdTaYcG58uGdX6 fun parseUser(raw: String): Result> = runCatching { val (name, ageStr) = raw.split(",") require(ageStr.toIntOrNull() != null) { "age must be int" } name to ageStr.toInt() } fun main() { val r1 = parseUser("Alice,30") println(r1) // Success((Alice, 30)) val r2 = parseUser("Bob,xyz") println(r2) // Failure(IllegalArgumentException ...) // map / mapCatching transform success values val agePlusOne: Result = r1.map { it.second + 1 } println(agePlusOne) // Success(31) // fold — handle both branches val display = r2.fold( onSuccess = { (name, age) -> "$name is $age" }, onFailure = { ex -> "Error: ${ex.message}" } ) println(display) // Error: age must be int // Get-or-default style val safeAge = parseUser("Cara,40").getOrNull()?.second ?: -1 println(safeAge) // 40 }