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
- Serializable
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
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( ... ) @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[_]
- 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
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( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @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))