final case class OptionT[F[_], A](value: F[Option[A]]) extends Product with Serializable
OptionT[F[_], A]
is a light wrapper on an F[Option[A]]
with some
convenient methods for working with this nested structure.
It may also be said that OptionT
is a monad transformer for Option
.
For more information, see the documentation.
- Source
- OptionT.scala
- Alphabetic
- By Inheritance
- OptionT
- Serializable
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def ===(that: OptionT[F, A])(implicit eq: Eq[F[Option[A]]]): Boolean
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(5))) scala> optionT === OptionT[List, Int](List(Some(2), None)) res0: Boolean = false scala> optionT === OptionT[List, Int](List(Some(2), None, Some(5))) res0: Boolean = true
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def cata[B](default: => B, f: (A) => B)(implicit F: Functor[F]): F[B]
Catamorphism on the Option.
Catamorphism on the Option. This is identical to fold, but it only has one parameter list, which can result in better type inference in some contexts.
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(42), None)) scala> optionT.cata[String]("default", x => x.toString + "!") res0: List[String] = List(42!, default)
- def cataF[B](default: => F[B], f: (A) => F[B])(implicit F: FlatMap[F]): F[B]
Effectful catamorphism on the Option.
Effectful catamorphism on the Option. This is identical to foldF, but it only has one parameter list, which can result in better type inference in some contexts.
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(42), None)) scala> optionT.cataF[String](Nil, x => List(x.toString + "!")) res0: List[String] = List(42!)
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def collect[B](f: PartialFunction[A, B])(implicit F: Functor[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.collect{ case i if i == 2 => i } res0: OptionT[List, Int] = OptionT(List(Some(2), None, None, None, None)) scala> optionT.collect{ case i: Int => i == 2 } res0: OptionT[List, Boolean] = OptionT(List(Some(true), None, Some(false), None, None))
- def compare(that: OptionT[F, A])(implicit o: Order[F[Option[A]]]): Int
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.compare(OptionT[List, Int](List(Some(2)))) res0: Int = 1 scala> optionT.compare(OptionT[List, Int](List(Some(2), None, Some(414), None, None))) res0: Int = 0
- def contramap[B](f: (B) => A)(implicit F: Contravariant[F]): OptionT[F, B]
Example:
Example:
scala> import cats.Show scala> import cats.data.OptionT scala> val showIntOption: Show[Option[Int]] = oi => oi.map(_.toString + "!").getOrElse("default") scala> val optionT: OptionT[Show, Int] = OptionT[Show, Int](showIntOption) scala> optionT.contramap[Double](_.toInt).value.show(Some(5.4321)) res0: String = 5!
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def exists(f: (A) => Boolean)(implicit F: Functor[F]): F[Boolean]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), None, Some(3))) scala> optionT.exists(_ % 2 == 0) res0: List[Boolean] = List(true, false, false)
- def filter(p: (A) => Boolean)(implicit F: Functor[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.filter(el => (el % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.filter(el => (el % 3 == 0)) res1: OptionT[List, Int] = OptionT(List(None, None, Some(414), None, None))
- def filterF(p: (A) => F[Boolean])(implicit F: Monad[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(100), None, Some(421), Some(333))) scala> optionT.filterF(n => List(n % 100 == 0, n.toString.toSet.size == 1)) res0: OptionT[List, Int] = OptionT(List(Some(100), None, None, None, None, None, Some(333)))
- def filterNot(p: (A) => Boolean)(implicit F: Functor[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.filterNot(el => (el % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(None, None, None, None, None)) scala> optionT.filterNot(el => (el % 3 == 0)) res1: OptionT[List, Int] = OptionT(List(Some(2), None, None, None, None))
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def flatMap[B](f: (A) => OptionT[F, B])(implicit F: Monad[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.flatMap(x => OptionT.when(x % 2 == 0)(x)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- def flatMapF[B](f: (A) => F[Option[B]])(implicit F: Monad[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.flatMapF(x => List(Option(x).filter(_ % 2 == 0))) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- def flatTapNone[B](ifNone: => F[B])(implicit F: Monad[F]): OptionT[F, A]
Perform an effect if the value inside the is a
None
, leaving the value untouched.Perform an effect if the value inside the is a
None
, leaving the value untouched. Equivalent to orElseF with an effect returningNone
as argument.Example:
scala> import cats.data.OptionT scala> // prints "no value" scala> val optionT: OptionT[Either[String, *], Int] = OptionT[Either[String, *], Int](Right(None)) scala> optionT.flatTapNone(Left("no value!")) res0: OptionT[Either[String, *], Int] = OptionT(Left(no value!))
- def flatTransform[B](f: (Option[A]) => F[Option[B]])(implicit F: Monad[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.flatTransform(x => List(x.filter(_ % 2 == 0))) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- def fold[B](default: => B)(f: (A) => B)(implicit F: Functor[F]): F[B]
- def foldF[B](default: => F[B])(f: (A) => F[B])(implicit F: FlatMap[F]): F[B]
Transform this
OptionT[F, A]
into aF[B]
.Transform this
OptionT[F, A]
into aF[B]
.Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(23), None)) scala> optionT.foldF(Nil)(v => List(v, v * 2)) res0: List[Int] = List(23, 46)
- def foldLeft[B](b: B)(f: (B, A) => B)(implicit F: Foldable[F]): B
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(5))) scala> optionT.foldLeft(0)((acc, x) => acc + x) res0: Int = 7
- def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B])(implicit F: Foldable[F]): Eval[B]
Example:
Example:
scala> import cats.Eval scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(5))) scala> optionT.foldRight(Eval.One)((x, acc) => Eval.later(x * acc.value)).value res0: Int = 10
- def forall(f: (A) => Boolean)(implicit F: Functor[F]): F[Boolean]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), None, Some(3))) scala> optionT.forall(_ % 2 == 0) res0: List[Boolean] = List(true, true, false)
- def foreachF(f: (A) => F[Unit])(implicit F: Monad[F]): F[Unit]
Transform this
OptionT[F, A]
into aF[Unit]
.Transform this
OptionT[F, A]
into aF[Unit]
. This is identical tofoldF(F.unit)(f)
. - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def getOrElse[B >: A](default: => B)(implicit F: Functor[F]): F[B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), None, Some(4))) scala> optionT.getOrElse(42) res0: List[Int] = List(2, 42, 4)
- def getOrElseF[B >: A](default: => F[B])(implicit F: Monad[F]): F[B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), None, Some(4))) scala> optionT.getOrElseF(List(42)) res0: List[Int] = List(2, 42, 4)
- def getOrRaise[E](e: => E)(implicit F: MonadError[F, _ >: E]): F[A]
Like getOrElseF but accept an error
E
and raise it when the innerOption
isNone
Like getOrElseF but accept an error
E
and raise it when the innerOption
isNone
Equivalent to
getOrElseF(F.raiseError(e)))
scala> import cats.data.OptionT scala> import scala.util.{Success, Try} scala> val optionT: OptionT[Try, Int] = OptionT[Try, Int](Success(None)) scala> optionT.getOrRaise(new RuntimeException("ERROR!")) res0: Try[Int] = Failure(java.lang.RuntimeException: ERROR!)
- def imap[B](f: (A) => B)(g: (B) => A)(implicit F: Invariant[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT.some[List](99) scala> optionT.imap[Char](_.toChar)(_.toInt) res0: OptionT[List, Char] = OptionT(List(Some(c)))
- def isDefined(implicit F: Functor[F]): F[Boolean]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.isDefined res0: List[Boolean] = List(true, false, true, false, false)
- def isEmpty(implicit F: Functor[F]): F[Boolean]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.isEmpty res0: List[Boolean] = List(false, true, false, true, true)
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def map[B](f: (A) => B)(implicit F: Functor[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.map(_.toString + "!") res0: OptionT[List, String] = OptionT(List(Some(2!), None, Some(414!), None, None))
- def mapAccumulate[S, B](init: S)(f: (S, A) => (S, B))(implicit traverseF: Traverse[F]): (S, OptionT[F, B])
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(5))) scala> optionT.mapAccumulate(0)((s, a) => (s + a, s"$a!")) res0: (Int, OptionT[List, String]) = (7,OptionT(List(Some(2!), None, Some(5!))))
- def mapFilter[B](f: (A) => Option[B])(implicit F: Functor[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.mapFilter(x => Option(x).filter(_ % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- def mapK[G[_]](f: ~>[F, G]): OptionT[G, A]
Modify the context
F
using transformationf
.Modify the context
F
using transformationf
.Example:
scala> import cats.~> scala> import cats.data.OptionT scala> val optionToList: Option ~> List = new ~>[Option, List] { override def apply[A](o: Option[A]): List[A] = o.toList } scala> val optionT: OptionT[Option, Int] = OptionT.some(42) scala> optionT.mapK[List](optionToList) res0: OptionT[List, Int] = OptionT(List(Some(42)))
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def orElse(default: => OptionT[F, A])(implicit F: Monad[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.orElseF(List[Option[Int]](Some(-1))) res0: OptionT[List, Int] = OptionT(List(Some(2), Some(-1), Some(414), Some(-1), Some(-1)))
- def orElseF(default: => F[Option[A]])(implicit F: Monad[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4))) scala> optionT.orElseF(List(Some(3))) res0: OptionT[List, Int] = OptionT(List(Some(2), Some(3), Some(4)))
- def partialCompare(that: OptionT[F, A])(implicit p: PartialOrder[F[Option[A]]]): Double
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Double] = OptionT(List(Some(0.1), None, Some(0.5))) scala> optionT.partialCompare(OptionT[List, Double](List(Some(2)))) res0: Double = -1.0 scala> optionT.partialCompare(OptionT[List, Double](List(Some(0.1), None, Some(0.5)))) res0: Double = 0.0
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- def semiflatMap[B](f: (A) => F[B])(implicit F: Monad[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(3), Some(5))) scala> optionT.semiflatMap(x => List(x, x * 6)) res0: OptionT[List, Int] = OptionT(List(Some(3), Some(18), Some(5), Some(30)))
- def semiflatTap[B](f: (A) => F[B])(implicit F: Monad[F]): OptionT[F, A]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[Either[String, *], Int] = OptionT.some[Either[String, *]](3) scala> optionT.semiflatTap { case 1 | 2 | 3 => Right("hit!"); case _ => Left("miss!") } res0: OptionT[Either[String, *], Int] = OptionT(Right(Some(3))) scala> optionT.semiflatTap { case 0 | 1 | 2 => Right("hit!"); case _ => Left("miss!") } res1: OptionT[Either[String, *], Int] = OptionT(Left(miss!))
- def show(implicit F: Show[F[Option[A]]]): String
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.show res0: String = List(Some(2), None, Some(414), None, None)
- def subflatMap[B](f: (A) => Option[B])(implicit F: Functor[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.subflatMap(x => Option(x).filter(_ % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toLeft[R](right: => R)(implicit F: Functor[F]): EitherT[F, A, R]
Example:
Example:
scala> import cats.data.EitherT scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4))) scala> optionT.toLeft[Int](3) res0: EitherT[List, Int, Int] = EitherT(List(Left(2), Right(3), Left(4)))
- def toLeftF[R](right: => F[R])(implicit F: Monad[F]): EitherT[F, A, R]
Example:
Example:
scala> import cats.data.EitherT scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4))) scala> optionT.toLeftF[Int](List(3)) res0: EitherT[List, Int, Int] = EitherT(List(Left(2), Right(3), Left(4)))
- def toNested: Nested[F, Option, A]
Transform this
OptionT[F, A]
into aNested[F, Option, A]
.Transform this
OptionT[F, A]
into aNested[F, Option, A]
.An example where
toNested
can be used, is to get theApply.ap
function with the behavior from the composedApply
instances fromF
andOption
, which is inconsistent with the behavior of theap
fromMonad
ofOptionT
.scala> import cats.data.OptionT scala> import cats.syntax.all._ scala> val ff: OptionT[List, Int => String] = | OptionT(List(Option(_.toString), None)) scala> val fa: OptionT[List, Int] = OptionT(List(Option(1), Option(2))) scala> ff.ap(fa) res0: OptionT[List,String] = OptionT(List(Some(1), Some(2), None)) scala> OptionT(ff.toNested.ap(fa.toNested).value) res1: OptionT[List,String] = OptionT(List(Some(1), Some(2), None, None))
- def toRight[L](left: => L)(implicit F: Functor[F]): EitherT[F, L, A]
Example:
Example:
scala> import cats.data.EitherT scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4))) scala> optionT.toRight[Int](3) res0: EitherT[List, Int, Int] = EitherT(List(Right(2), Left(3), Right(4)))
- def toRightF[L](left: => F[L])(implicit F: Monad[F]): EitherT[F, L, A]
Example:
Example:
scala> import cats.data.EitherT scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4))) scala> optionT.toRightF[Int](List(3)) res0: EitherT[List, Int, Int] = EitherT(List(Right(2), Left(3), Right(4)))
- def transform[B](f: (Option[A]) => Option[B])(implicit F: Functor[F]): OptionT[F, B]
Example:
Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT[List, Int](List(Some(2), Some(3), Some(4))) scala> optionT.transform(_.filter(_ % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(4)))
- def traverse[G[_], B](f: (A) => G[B])(implicit F: Traverse[F], G: Applicative[G]): G[OptionT[F, B]]
Example:
Example:
scala> import cats.data.OptionT scala> import scala.util.Right scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(5))) scala> optionT.traverse[Either[Int, *], Int](x => Right[Int, Int](x)) res0: Either[Int, OptionT[List, Int]] = Right(OptionT(List(Some(2), None, Some(5))))
- val value: F[Option[A]]
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- def withFilter(p: (A) => Boolean)(implicit F: Functor[F]): OptionT[F, A]
It is used for desugaring 'for comprehensions'.
It is used for desugaring 'for comprehensions'. OptionT wouldn't work in 'for-comprehensions' without this method. Example:
scala> import cats.data.OptionT scala> val optionT: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.withFilter(el => (el % 2 == 0)) res0: OptionT[List, Int] = OptionT(List(Some(2), None, Some(414), None, None)) scala> optionT.withFilter(el => (el % 3 == 0)) res1: OptionT[List, Int] = OptionT(List(None, None, Some(414), None, None))