-
OptionTscala/cats2 2023. 1. 16. 10:34
cats OptionT example
import cats.data._ import cats.syntax.all._ import scala.util.{Success, Try} object OptionTExample { def main(args: Array[String]): Unit = { val a: Try[Option[Int]] = Success(1.some) val b: Try[Int] = Success(2) val c: Option[Int] = 3.some val d: OptionT[Try, Int] = OptionT.some(4) // OptionT[Try].some(4), OptionT.some is an alias for OptionT.pure val e: OptionT[Try, Int] = OptionT.none // OptionT.none[Try, Int] val f: OptionT[Try, Int] = OptionT.pure(4) // OptionT.pure[Try](4) val composedOptionT: OptionT[Try, Int] = for { v1 <- OptionT(a) v2 <- OptionT.liftF(b) // OptionT(b.map(Some(_))) v3 <- OptionT.fromOption[Try](c) // OptionT(Try(c)) v4 <- d } yield (v1 + v2 + v3 + v4) val composedValue: Try[Option[Int]] = composedOptionT.value println(composedValue) // Success(Some(10)) } }
flatTraverse() 사용
https://wefree.tistory.com/241 의 task7() 참고
import cats.syntax.all._ import scala.util.{Failure, Success, Try} object FlatTraverseExample { def main(args: Array[String]): Unit = { def f(x: Int): Try[Option[Int]] = Success((x + 10).some) val c: Option[Int] = 3.some val z: Try[Option[Option[Int]]] = c.traverse(x => f(x)) val zflatten: Try[Option[Int]] = z.map(_.flatten) // Success(Some(13)) val zz: Try[Option[Int]] = c.flatTraverse(x => f(x)) // Success(Some(13)) } }