CoflatMap
is the dual of FlatMap
.
Must obey the laws in cats.laws.CoflatMapLaws
Attributes
- Companion
- object
- Source
- CoflatMap.scala
- Graph
-
- Supertypes
-
trait Functor[F]trait Invariant[F]trait Serializableclass Objecttrait Matchableclass AnyShow all
- Known subtypes
Members list
Value members
Abstract methods
coflatMap
is the dual of flatMap
on FlatMap
.
coflatMap
is the dual of flatMap
on FlatMap
. It applies a value in a context to a function that takes a value in a context and returns a normal value.
Example:
scala> import cats.syntax.all._
scala> import cats.CoflatMap
scala> val fa = Some(3)
scala> def f(a: Option[Int]): Int = a match {
| case Some(x) => 2 * x
| case None => 0 }
scala> CoflatMap[Option].coflatMap(fa)(f)
res0: Option[Int] = Some(6)
Attributes
- Source
- CoflatMap.scala
Concrete methods
coflatten
is the dual of flatten
on FlatMap
.
coflatten
is the dual of flatten
on FlatMap
. Whereas flatten removes a layer of F
, coflatten adds a layer of F
Example:
scala> import cats.syntax.all._
scala> import cats.CoflatMap
scala> val fa = Some(3)
fa: Option[Int] = Some(3)
scala> CoflatMap[Option].coflatten(fa)
res0: Option[Option[Int]] = Some(Some(3))
Attributes
- Source
- CoflatMap.scala
Inherited methods
Replaces the A
value in F[A]
with the supplied value.
Replaces the A
value in F[A]
with the supplied value.
Example:
scala> import cats.syntax.all._
scala> List(1,2,3).as("hello")
res0: List[String] = List(hello, hello, hello)
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Compose Invariant F[_]
and G[_]
then produce Invariant[F[G[_]]]
using their imap
.
Compose Invariant F[_]
and G[_]
then produce Invariant[F[G[_]]]
using their imap
.
Example:
scala> import cats.syntax.all._
scala> import scala.concurrent.duration._
scala> val durSemigroupList: Semigroup[List[FiniteDuration]] =
| Invariant[Semigroup].compose[List].imap(Semigroup[List[Long]])(Duration.fromNanos)(_.toNanos)
scala> durSemigroupList.combine(List(2.seconds, 3.seconds), List(4.seconds))
res1: List[FiniteDuration] = List(2 seconds, 3 seconds, 4 seconds)
Attributes
- Inherited from:
- Invariant
- Source
- Invariant.scala
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Compose Invariant F[_]
and Contravariant G[_]
then produce Invariant[F[G[_]]]
using F's imap
and G's contramap
.
Compose Invariant F[_]
and Contravariant G[_]
then produce Invariant[F[G[_]]]
using F's imap
and G's contramap
.
Example:
scala> import cats.syntax.all._
scala> import scala.concurrent.duration._
scala> type ToInt[T] = T => Int
scala> val durSemigroupToInt: Semigroup[ToInt[FiniteDuration]] =
| Invariant[Semigroup]
| .composeContravariant[ToInt]
| .imap(Semigroup[ToInt[Long]])(Duration.fromNanos)(_.toNanos)
// semantically equal to (2.seconds.toSeconds.toInt + 1) + (2.seconds.toSeconds.toInt * 2) = 7
scala> durSemigroupToInt.combine(_.toSeconds.toInt + 1, _.toSeconds.toInt * 2)(2.seconds)
res1: Int = 7
Attributes
- Definition Classes
- Inherited from:
- Functor
- Source
- Functor.scala
Compose Invariant F[_]
and Functor G[_]
then produce Invariant[F[G[_]]]
using F's imap
and G's map
.
Compose Invariant F[_]
and Functor G[_]
then produce Invariant[F[G[_]]]
using F's imap
and G's map
.
Example:
scala> import cats.syntax.all._
scala> import scala.concurrent.duration._
scala> val durSemigroupList: Semigroup[List[FiniteDuration]] =
| Invariant[Semigroup]
| .composeFunctor[List]
| .imap(Semigroup[List[Long]])(Duration.fromNanos)(_.toNanos)
scala> durSemigroupList.combine(List(2.seconds, 3.seconds), List(4.seconds))
res1: List[FiniteDuration] = List(2 seconds, 3 seconds, 4 seconds)
Attributes
- Inherited from:
- Invariant
- Source
- Invariant.scala
Alias for map, since map can't be injected as syntax if the implementing type already had a built-in .map
method.
Alias for map, since map can't be injected as syntax if the implementing type already had a built-in .map
method.
Example:
scala> import cats.syntax.all._
scala> val m: Map[Int, String] = Map(1 -> "hi", 2 -> "there", 3 -> "you")
scala> m.fmap(_ ++ "!")
res0: Map[Int,String] = Map(1 -> hi!, 2 -> there!, 3 -> you!)
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Tuple the values in fa with the result of applying a function with the value
Tuple the values in fa with the result of applying a function with the value
Example:
scala> import cats.syntax.all._
scala> Option(42).fproduct(_.toString)
res0: Option[(Int, String)] = Some((42,42))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Pair the result of function application with A
.
Pair the result of function application with A
.
Example:
scala> import cats.syntax.all._
scala> Option(42).fproductLeft(_.toString)
res0: Option[(String, Int)] = Some((42,42))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Lifts if
to Functor
Lifts if
to Functor
Example:
scala> import cats.Functor
scala> import cats.syntax.all._
scala> Functor[List].ifF(List(true, false, false))(1, 0)
res0: List[Int] = List(1, 0, 0)
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Transform an F[A]
into an F[B]
by providing a transformation from A
to B
and one from B
to A
.
Transform an F[A]
into an F[B]
by providing a transformation from A
to B
and one from B
to A
.
Example:
scala> import cats.syntax.all._
scala> import scala.concurrent.duration._
scala> val durSemigroup: Semigroup[FiniteDuration] =
| Invariant[Semigroup].imap(Semigroup[Long])(Duration.fromNanos)(_.toNanos)
scala> durSemigroup.combine(2.seconds, 3.seconds)
res1: FiniteDuration = 5 seconds
Attributes
- Definition Classes
- Inherited from:
- Functor
- Source
- Functor.scala
Lift a function f to operate on Functors
Lift a function f to operate on Functors
Example:
scala> import cats.Functor
scala> import cats.syntax.all._
scala> val o = Option(42)
scala> Functor[Option].lift((x: Int) => x + 10)(o)
res0: Option[Int] = Some(52)
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Modifies the A
value in F[A]
with the supplied function, if the function is defined for the value.
Modifies the A
value in F[A]
with the supplied function, if the function is defined for the value. Example:
scala> import cats.syntax.all._
scala> List(1, 2, 3).mapOrKeep { case 2 => 42 }
res0: List[Int] = List(1, 42, 3)
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Tuples the A
value in F[A]
with the supplied B
value, with the B
value on the left.
Tuples the A
value in F[A]
with the supplied B
value, with the B
value on the left.
Example:
scala> import scala.collection.immutable.Queue
scala> import cats.syntax.all._
scala> Queue("hello", "world").tupleLeft(42)
res0: scala.collection.immutable.Queue[(Int, String)] = Queue((42,hello), (42,world))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Tuples the A
value in F[A]
with the supplied B
value, with the B
value on the right.
Tuples the A
value in F[A]
with the supplied B
value, with the B
value on the right.
Example:
scala> import scala.collection.immutable.Queue
scala> import cats.syntax.all._
scala> Queue("hello", "world").tupleRight(42)
res0: scala.collection.immutable.Queue[(String, Int)] = Queue((hello,42), (world,42))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Un-zips an F[(A, B)]
consisting of element pairs or Tuple2 into two separate F's tupled.
Un-zips an F[(A, B)]
consisting of element pairs or Tuple2 into two separate F's tupled.
NOTE: Check for effect duplication, possibly memoize before
scala> import cats.Functor
scala> import cats.syntax.all._
scala> Functor[List].unzip(List((1,2), (3, 4)))
res0: (List[Int], List[Int]) = (List(1, 3),List(2, 4))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Empty the fa of the values, preserving the structure
Empty the fa of the values, preserving the structure
Example:
scala> import cats.syntax.all._
scala> List(1,2,3).void
res0: List[Unit] = List((), (), ())
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala
Lifts natural subtyping covariance of covariant Functors.
Lifts natural subtyping covariance of covariant Functors.
NOTE: In certain (perhaps contrived) situations that rely on universal equality this can result in a ClassCastException
, because it is implemented as a type cast. It could be implemented as map(identity)
, but according to the functor laws, that should be equal to fa
, and a type cast is often much more performant. See this example of widen
creating a ClassCastException
.
Example:
scala> import cats.syntax.all._
scala> val l = List(Some(42))
scala> l.widen[Option[Int]]
res0: List[Option[Int]] = List(Some(42))
Attributes
- Inherited from:
- Functor
- Source
- Functor.scala