У меня есть список Either, который представляет ошибку:
type ErrorType = List[String]
type FailFast[A] = Either[ErrorType, A]
import cats.syntax.either._
val l = List(1.asRight[ErrorType], 5.asRight[ErrorType])
Если все они правы, я хочу получить список [A], в данном случае - List[Int]
Если осталось Either
, я хочу объединить все ошибки всех и вернуть их.
Я нашел похожую тему в [ Как уменьшить Seq [Either [A, B]] до Either [A, Seq [B]]
Но это было довольно давно. Например, один из ответов предлагает использовать partitionMap
, который я не могу найти в данный момент. Вероятно, есть лучшее, более элегантное решение. Пример со скалами-кошками был бы великолепен.
Как я хотел бы использовать это:
for {
listWithEihers <- someFunction
//if this list contains one or more errors, return Left[List[String]]
//if everything is fine, convert it to:
correctItems <- //returns list of List[Int] as right
} yield correctItems
Тип возвращаемого значения для этого понимания:
Either[List[String], List[Int]]