BIOCatsFunctor

izumi.functional.bio.CatsConversions.BIOCatsFunctor
trait BIOCatsFunctor[F[_, _], E] extends Functor[[_] =>> F[E, _$41]]

Attributes

Graph
Supertypes
trait Functor[[_] =>> F[E, _$41]]
trait Invariant[[_] =>> F[E, _$41]]
trait Serializable
class Object
trait Matchable
class Any
Show all
Known subtypes
trait BIOCatsApplicative[F, E]
class BIOCatsClockImpl[F, E]
class BIOCatsMonad[F, E]
class BIOCatsMonadError[F, E]
class BIOCatsSpawnImpl[F]
class BIOCatsSync[F]
class BIOCatsAsync[F]
class BIOCatsSyncImpl[F]
Show all

Members list

Value members

Abstract methods

def F: Functor2[F]

Concrete methods

final override def as[A, B](fa: F[E, A], b: B): F[E, B]

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

Definition Classes
Functor
final override def map[A, B](fa: F[E, A])(f: A => B): F[E, B]

Attributes

Definition Classes
Functor
final override def void[A](fa: F[E, A]): F[E, Unit]

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

Definition Classes
Functor
final override def widen[A, B >: A](fa: F[E, A]): F[E, B]

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

Definition Classes
Functor

Inherited methods

def compose[G[_] : Functor]: Functor[[α] =>> [_] =>> F[E, _$41][G[α]]]

Attributes

Inherited from:
Functor
def compose[G[_] : Invariant]: Invariant[[α] =>> [_] =>> F[E, _$41][G[α]]]

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
def composeBifunctor[G[_, _] : Bifunctor]: Bifunctor[[α, β] =>> [_] =>> F[E, _$41][G[α, β]]]

Attributes

Inherited from:
Functor
override def composeContravariant[G[_] : Contravariant]: Contravariant[[α] =>> [_] =>> F[E, _$41][G[α]]]

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
Functor -> Invariant
Inherited from:
Functor
def composeFunctor[G[_] : Functor]: Invariant[[α] =>> [_] =>> F[E, _$41][G[α]]]

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
final def fmap[A, B](fa: [_] =>> F[E, _$41][A])(f: A => B): [_] =>> F[E, _$41][B]

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
def fproduct[A, B](fa: [_] =>> F[E, _$41][A])(f: A => B): [_] =>> F[E, _$41][(A, B)]

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
def fproductLeft[A, B](fa: [_] =>> F[E, _$41][A])(f: A => B): [_] =>> F[E, _$41][(B, A)]

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
def ifF[A](fb: [_] =>> F[E, _$41][Boolean])(ifTrue: => A, ifFalse: => A): [_] =>> F[E, _$41][A]

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
override def imap[A, B](fa: [_] =>> F[E, _$41][A])(f: A => B)(g: B => A): [_] =>> F[E, _$41][B]

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
Functor -> Invariant
Inherited from:
Functor
def lift[A, B](f: A => B): [_] =>> F[E, _$41][A] => [_] =>> F[E, _$41][B]

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
def mapOrKeep[A, A1 >: A](fa: [_] =>> F[E, _$41][A])(pf: PartialFunction[A, A1]): [_] =>> F[E, _$41][A1]

Modifies the A value in F[A] with the supplied function, if the function is defined for the value. Example:

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
def tupleLeft[A, B](fa: [_] =>> F[E, _$41][A], b: B): [_] =>> F[E, _$41][(B, A)]

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
def tupleRight[A, B](fa: [_] =>> F[E, _$41][A], b: B): [_] =>> F[E, _$41][(A, B)]

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
def unzip[A, B](fab: [_] =>> F[E, _$41][(A, B)]): ([_] =>> F[E, _$41][A], [_] =>> F[E, _$41][B])

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