4
EitherT
とOptionT
を使って、タイプFuture[Either[Error, Option[T]]
を扱いたいと思います。次のメソッドを仮定:今すぐ`OptionT`と` EitherT`を組み合わせてFuture {[Error、Option [T]]]を処理する
def findTeacher(id: Int): Future[Either[String, Option[Teacher]]]
def findSchool(teacher: Teacher): Future[Either[String, Option[School]]]
を私はこのようEitherT
とOptionT
を使用することができるため、理解して、その後それらをコールする場合:
def getSchoolByTeacherId(id: Int): Future[Either[String, Option[School]]] = {
val result = for {
maybeTeacher <- EitherT(findTeacher(id))
schoolF = maybeTeacher.map(findSchool).getOrElse(Future.successful(Right(None)))
school <- EitherT(schoolF)
} yield {
school
}
result.value
}
それはより多くのそれを作ることが可能ですかしら簡潔なのはOptionT
とEitherT
の組み合わせですか?
「OptionT」を使用することでどのような利点が期待できますか(あなたの例では使用しません)? –
2つ目の理解の代わりに、より簡潔な方法を探しています。あるいは、私が気づいていないいくつかの方法やタイプの猫を使って別のやり方で書き直すことができます(必ずしもfor-comprehensionを使う必要はありません) –