Skip to main content
Version: 2.x

Zooming In on Nested Values

Option

We can extract a value from a Some using ZIO#some and then we can unsome it again using ZIO#unsome:

ZIO.attempt(Option("something")) // ZIO[Any, Throwable, Option[String]]
.some // ZIO[Any, Option[Throwable], String]
.unsome // ZIO[Any, Throwable, Option[String]]

Either

With Either ZIO values, we can zoom in or out on the left or right side of an Either, as well as we can do the inverse and zoom out:

import zio._

val eitherEffect: ZIO[Any, Exception, Either[String, Int]] = ???

eitherEffect // ZIO[Any, Exception, Either[String, Int]]
.left // ZIO[Any, Either[Exception, Int], String]
.unleft // ZIO[Any, Exception, Either[String, Int]]

eitherEffect // ZIO[Any, Exception, Either[String, Int]]
.right // ZIO[Any, Either[String, Exception], Int]
.unright // ZIO[Any, Exception, Either[String, Int]]