Мы можем использовать cats.data.ValidatedNel
(что в псевдониме для Validated[NonEmptyList[E], A]
), что точно подходит для этого вида проверки:
import cats.data.ValidatedNel
import cats.implicits._
def validation(data: String): Validated[NonEmptyList[String], Boolean] = {
def validateData1(data: String): ValidatedNel[String, Unit] = ???
def validateData2(data: String): ValidatedNel[String, Unit] = ???
def validateData3(data: String): ValidatedNel[String, Unit] = ???
val data: String = ???
val res: ValidatedNel[String, Unit] =
validateData1(data) *>
validateData2(data) *>
validateData3(data)
res.map(_ => true)
}
И затем:
validation("foo").toEither match {
case Left(errors) => // log errors
case Right(validation) => // Do whatever you want with the validated boolean
}