4

一連のエラーまたはビューがあります ( Seq[Xor[Error,View]])

Xor[Error, Seq[View]]これを最初のエラー (ある場合) またはビューのシーケンス ( ) または単に ( Xor[Seq[Error],Seq[View])の Xor にマップしたい

これどうやってするの?

4

2 に答える 2

4

Cats の最新バージョンでXorは削除され、現在は標準の ScalaEitherデータ型が使用されています。

sequenceMichael Zajac は、 or sequenceU(実際にはTraversenotで定義されてBitraverseいる) を使用して を取得できることを正しく示しましたEither[Error, List[View]]

import cats.implicits._

val xs: List[Either[Error, View]] = ???

val errorOrViews: Either[Error, List[View]] = xs.sequenceU

ほとんどの場合、 の代わりに使用できる( aと a のtraverseような)を見たいと思うかもしれません。mapsequencesequence

失敗するすべてのエラーが必要な場合は、 を使用できませんが、 (またはの単なる型エイリアスである をEither使用できます) 。ValidatedValidatedNelValidated[NonEmptyList[A], B]

import cats.data.{NonEmptyList, ValidatedNel}

val errorsOrViews: ValidatedNel[Error, List[View]] = xs.traverseU(_.toValidatedNel)

val errorsOrViews2: Either[NonEmptyList[Error], List[View]] = errorsOrViews.toEither

次を使用して、エラーとビューを取得することもできMonadCombine.separateます。

val errorsAndViews: (List[Error], List[View]) = xs.separate

Cats の Web サイトで、さらに多くの例Eitherと情報を見つけることができます。Validated

于 2016-12-01T15:34:19.290 に答える