ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OptionT
    scala/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))
      }
    }

    'scala > cats2' 카테고리의 다른 글

    Cats2 Exercise  (0) 2023.01.22
    Validated  (0) 2023.01.19
    Writer  (0) 2023.01.19
    Nested  (0) 2023.01.16
    State  (0) 2023.01.10

    댓글

Designed by Tistory.