import arrow.core.NonEmptyList import arrow.core.Validated //sampleStart fun parallelValidate(v1: Validated, v2: Validated, f: (A, B) -> C): Validated, C> = when { v1 is Validated.Valid && v2 is Validated.Valid -> Validated.Valid(f(v1.a, v2.a)) v1 is Validated.Valid && v2 is Validated.Invalid -> v2.toValidatedNel() v1 is Validated.Invalid && v2 is Validated.Valid -> v1.toValidatedNel() v1 is Validated.Invalid && v2 is Validated.Invalid -> Validated.Invalid(NonEmptyList(v1.e, listOf(v2.e))) else -> throw IllegalStateException("Not possible value") } //sampleEnd