Masrur Mirboboev
traverse
fun <A, B> Iterable<B>.traverseAll(f: (B) -> Either<A, B>): Either<List<A>, List<B>> { val lefts: MutableList<A> = mutableListOf() val rights: MutableList<B> = mutableListOf() forEach { f(it).fold(lefts::add, rights::add) } return conditionally( test = lefts.isEmpty(), ifTrue = { rights }, ifFalse = { lefts } ) }
qohatpp
List<B>
(B) -> Either<A, B>
Either<A, List<B>>
traverse(Semigroup, B -> Validated<A, B>) or parTraverseValidated()
simon.vergauwen
Validated<NonEmptyList<E>, A>
Validated<NonEmptyList<E>, List<A>>
Semigroup
NonEmptyList
{ listA, listB -> listA + listB }
stojan
suspend
A modern programming language that makes developers happier.