それはあなたがそれらを結合する方法に依存し
import cats.data.{Validated, ValidatedNel}
import cats.implicits._
val validations1 = List(1.validNel[String], 2.valid, 3.valid)
val validations2 = List(1.validNel[String], "kaboom".invalidNel, "boom".invalidNel)
あなたがT
を組み合わせるためにしたい場合は、あなたが使用するFoldable.combineAll
を使用することができますMonoid[T]
(あなたの質問にあるものvalidatedValue
を?):
val valSum1 = validations1.combineAll
// Valid(6)
val valSum2 = validations2.combineAll
// Invalid(OneAnd(kaboom,List(boom)))
あなたがValidationNel[String, List[T]]
を取得したい場合は、あなたがTraverse.sequenceU
を使用することができます。
val valList1: ValidatedNel[String, List[Int]] = validations1.sequenceU
// Valid(List(1, 2, 3))
val valList2: ValidatedNel[String, List[Int]] = validations2.sequenceU
// Invalid(OneAnd(kaboom,List(boom)))
結果が気にならない場合は、Foldable.sequenceU_
を使用できます。
val result1: ValidatedNel[String, Unit] = validations1.sequenceU_
// Valid(())
val result2: ValidatedNel[String, Unit] = validations2.sequenceU_
// Invalid(OneAnd(kaboom,List(boom)))
validations1.sequenceU_.as(validatedValue) // as(x) is equal to map(_ => x)
ご迷惑をおかけして申し訳ございませんが、元の質問(今は 'validatedValue')の値は検証されている値、つまり' T'です。 – Tvaroh
'combineAll'のように見えます。 'Seq'、btwに' .toList'呼び出しを追加する必要がありました。 – Tvaroh
@Tvarohはい、catsには 'Seq'の型クラスインスタンスがありませんので、' List'か 'Vector'に行く必要があります。 –