У меня есть пара Vavr Either, и я хочу вызвать функцию со значением Right
для каждого из этих Either. Например:
Either<MyError, String> either1 = ..
Either<MyError, String> either2 = ..
Either<MyError, String> either3 = ..
Either<MyError, String>> methodRequiringAllInputs(String, String, String) {
..
}
Конечно, я мог бы сделать что-то вроде этого:
either1.flatMap { value1 ->
either2.flatMap { value2 ->
either3.flatMap { value3 ->
methodRequiringAllInputs(value1, value2, value3);
}
}
}
Но это очень некрасиво. В других языках вы могли бы просто использовать что-то вроде do-notation или для понимания, чтобы сгладить структуру. Я знаю, что в Vavr есть концепция валидации, которая представляет собой аппликативный функтор, который позволяет вам сделать:
Validation<MyError, String> validation1 = ..
Validation<MyError, String> validation2 = ..
Validation<MyError, String> validation3 = ..
Validation.combine(validation1, validation2, validation3)
.ap((validationValue1,validationValue2,validationValue3) -> .. );
что намного приятнее.
Мой вопрос: существует ли что-то подобное в Vavr для Either's, чтобы избежать вложенной структуры flatMap
? Обратите внимание, что я не хочу преобразовывать Either
в Validation
.