Rohde Fischer
Either
val result1 = foo() // : Either<Error, Result1> val result2 = foo() // : Either<Error, Result2> val result3 = foo() // : Either<Error, Result3> val transformed = result1.flatMap { res1 -> result2.flatMap { res2 -> result3.flatMap { res3 -> someCall(res1, res2, res3) } } }
flatMap
Right(someCall) .flatMap { fn -> foo().map { res1 -> {res2: Result2, res3: Result3 -> fn(res1, res2, res3) } } } .flatMap { fn -> foo().map { res2 -> {res3: Result3 -> fn(res2, res3) } } } .flatMap { fn -> foo().map { fn(it) } } }
Youssef Shoaib [MOD]
either
either<Error> { someCall(result1.bind(), result2.bind(), result3.bind() }
Either.zip
result1.zip(result2, result3, ::someCall)
A modern programming language that makes developers happier.