Работа с типом данных scala-cat Ior Я столкнулся со следующей проблемой:
import cats._
import cats.data._
import cats.implicits._
type Locale = String
type FailureMessage = String
type Failures = NonEmptyList[FailureMessage]
private def listTranslationFiles(): IO[FailureMessage Either Array[File]] = ???
private def analyzeTranslationFiles(fs: Array[File]): Failures Ior Seq[(Locale, File)] = ???
private def readTranslations(): IO[Failures Ior Seq[(Locale, File)]] = for {
files <- listTranslationFiles()
fileIor = if(files.isLeft) (NonEmptyList(files.left.get, Nil): Failures).leftIor
else files.right.get.rightIor
// fileIor: Ior[Failures, Array[File]]
analyzed = fileIor.bimap(identity, analyzeTranslationFiles)
// analyzed: Ior[Failures, Ior[Failures, Seq[(Locale, File)]]]
result = ??? // how do I 'flatten' analyzed here?
} yield result
На моем последнем шаге мне нужно преобразовать этот тип:
Ior[Failures, Ior[Failures, Seq[(Locale, File)]]]
в:
Ior[Failures, Seq[(Locale, File)]]
каким-либо образом flatten
с Ior
(я хочу собрать все левые Ior
в верхнюю часть-уровень Ior
).Как этого достичь?