S> Iterable<A>.separateEither( transform: (A) -> Either<F, S> ): Pair<List<F>, List<S>> { val left = mutableListOf<F>() val right = mutableListOf<S>() for (item in this) { when (val either = transform(item)) { is Either.Left -> left.add(either.value) is Either.Right -> right.add(either.value) } } return Pair(left, right) }