Iがエラーまたはビューの配列(Seq[Xor[Error,View]]
)猫配列[Xorの[A、B] => Xorの[A、配列、[B]
を有するIが最初とのXORにこれをマッピングしますエラー(存在する場合)またはビューのシーケンス (Xor[Error, Seq[View]]
)またはおそらく単純に(Xor[Seq[Error],Seq[View]
)
どうすればよいですか?
Iがエラーまたはビューの配列(Seq[Xor[Error,View]]
)猫配列[Xorの[A、B] => Xorの[A、配列、[B]
を有するIが最初とのXORにこれをマッピングしますエラー(存在する場合)またはビューのシーケンス (Xor[Error, Seq[View]]
)またはおそらく単純に(Xor[Seq[Error],Seq[View]
)
どうすればよいですか?
の構文で提供されているsequenceU
を使用できます。これは、scalazの場合と同様です。しかし、Seq
の適切な型クラスが存在しないようですが、List
を使用することができます。猫Xor
の最新バージョンで
import cats._, data._, implicits._, syntax.bitraverse._
case class Error(msg: String)
case class View(content: String)
val errors: List[Xor[Error, View]] = List(
Xor.Right(View("abc")), Xor.Left(Error("error!")),
Xor.Right(View("xyz"))
)
val successes: List[Xor[Error, View]] = List(
Xor.Right(View("abc")),
Xor.Right(View("xyz"))
)
scala> errors.sequenceU
res1: cats.data.Xor[Error,List[View]] = Left(Error(error!))
scala> successes.sequenceU
res2: cats.data.Xor[Error,List[View]] = Right(List(View(abc), View(xyz)))
削除され、現在は標準のScala Either
データ型が使用されています。
マイケルZajacは、あなたが(実際にはないBitraverse
Traverse
上で定義される)sequence
またはsequenceU
がEither[Error, List[View]]
を取得するために使用できることを正しく示しました。
import cats.implicits._
val xs: List[Either[Error, View]] = ???
val errorOrViews: Either[Error, List[View]] = xs.sequenceU
あなたはsequence
するのではなく、ほとんどの時間を使うことができ、(map
とsequence
のようである)traverse
で見たいと思うかもしれません。あなたはすべて失敗し、エラーをしたい場合は
、あなたはEither
を使用することはできませんが、Validated[NonEmptyList[A], B]
のためだけのタイプの別名であるValidated
(またはValidatedNel
を、使用することができます。
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のウェブサイトのとValidated
このタイプのメソッドの関数名は 'traversal'の特殊なケースである 'sequence'です。 XorをTraverseに暗黙のうちに変換するものをあなたは信じています。 https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/Traverse.scala –