Packages

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
Linear Supertypes
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. OptionT
  2. Serializable
  3. Product
  4. Equals
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new OptionT(value: F[Option[A]])

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. 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
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. 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)
  7. 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!)
  8. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  9. 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))
  10. 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
  11. 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!
  12. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. 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)
  14. 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))
  15. 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)))
  16. 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))
  17. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  18. 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)))
  19. 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)))
  20. 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 returning None 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!))
  21. 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)))
  22. def fold[B](default: => B)(f: (A) => B)(implicit F: Functor[F]): F[B]
  23. def foldF[B](default: => F[B])(f: (A) => F[B])(implicit F: FlatMap[F]): F[B]

    Transform this OptionT[F, A] into a F[B].

    Transform this OptionT[F, A] into a F[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)
  24. 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
  25. 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
  26. 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)
  27. def foreachF(f: (A) => F[Unit])(implicit F: Monad[F]): F[Unit]

    Transform this OptionT[F, A] into a F[Unit].

    Transform this OptionT[F, A] into a F[Unit]. This is identical to foldF(F.unit)(f).

  28. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  29. 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)
  30. 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)
  31. def getOrRaise[E](e: => E)(implicit F: MonadError[F, _ >: E]): F[A]

    Like getOrElseF but accept an error E and raise it when the inner Option is None

    Like getOrElseF but accept an error E and raise it when the inner Option is None

    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!)
  32. 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)))
  33. 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)
  34. 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)
  35. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  36. 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))
  37. 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!))))
  38. 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)))
  39. def mapK[G[_]](f: ~>[F, G]): OptionT[G, A]

    Modify the context F using transformation f.

    Modify the context F using transformation f.

    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)))
  40. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  41. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  42. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  43. 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)))
  44. 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)))
  45. 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
  46. def productElementNames: Iterator[String]
    Definition Classes
    Product
  47. 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)))
  48. 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!))
  49. 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)
  50. 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)))
  51. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  52. 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)))
  53. 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)))
  54. def toNested: Nested[F, Option, A]

    Transform this OptionT[F, A] into a Nested[F, Option, A].

    Transform this OptionT[F, A] into a Nested[F, Option, A].

    An example where toNested can be used, is to get the Apply.ap function with the behavior from the composed Apply instances from F and Option, which is inconsistent with the behavior of the ap from Monad of OptionT.

    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))
  55. 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)))
  56. 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)))
  57. 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)))
  58. 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))))
  59. val value: F[Option[A]]
  60. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  61. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  62. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  63. 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))

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped