の将来のために、将来の論理和を変換するにはどうすればメソッドの結果があります。 val res: Future[Int] Xor Future[String] = getResult(x)
和
を、私はから私のユースケースを外挿することができませんでした、それを変換し、Future[Int Xor String]
としてそれを使用したいですherding cats blogと、モナド変圧器が適切な工具であるかどうかは不明ですが、traverse
のようなものでしょうか?
Xor
catsの中には、どんな選択肢もあります。 Scalaz \/
またはstdlib Either
も同様です(しかし、私はバイアスされた論理和を好むでしょうが)。
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scalaz.std.scalaFuture._
import scalaz.{\/, Functor}
val disj: Future[Int] \/ Future[String] = \/.right(Future.successful("foo"))
Functor[Future].counzip(disj)
// Future[Int \/ String] : Success(\/-(foo))
Scalazはまた、あなたの逆を与えるCozip
型クラスがあります。
はScalazはFunctor.counzip
を持っていますが、scalaz.syntax.functor
にはcounzip
我々は直接Functor[Future]
でそれを呼び出す必要がありそうありませんあなた
感謝トラヴィス、私のためにうまく動作します。私はここで何をしているのかよく理解してほしいです:) – kostja
@kostja [Gitter room](https://gitter.im/typelevel/cats)には、質問にもっと多くの人が常に対話的に答えてくれる人がほとんどいます! –
この場合、キーは「Traverse」と「sequence」から一般化されています。これらは少しシンプルでより広く適用できるので、それらを使用する方法に関する直感を構築することが役に立ちそうです。 –