ContravariantSemigroupal is nothing more than something both contravariant and Semigroupal. It comes up enough to be useful, and composes well
Attributes
- Companion:
- object
- Source:
- ContravariantSemigroupal.scala
- Graph
- Supertypes
- trait Contravariant[F]trait InvariantSemigroupal[F]trait Invariant[F]trait Semigroupal[F]trait Serializableclass Objecttrait Matchableclass Any
- Known subtypes
- trait ContravariantMonoidal[F]
- Self type
Members list
Value members
Concrete methods
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.implicits._
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
- Definition Classes
- Source:
- ContravariantSemigroupal.scala
Inherited methods
Attributes
- Inherited from:
- Contravariant
- Source:
- Contravariant.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.implicits._
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:
- InvariantSemigroupal
- Source:
- InvariantSemigroupal.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.implicits._
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
- Inherited from:
- Invariant
- Source:
- Invariant.scala
Attributes
- Inherited from:
- Contravariant
- Source:
- Contravariant.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.implicits._
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:
- Contravariant
- Source:
- Contravariant.scala
Attributes
- Inherited from:
- Contravariant
- Source:
- Contravariant.scala
Lifts natural subtyping contravariance of contravariant Functors. could be implemented as contramap(identity), but the Functor laws say this is equivalent
Lifts natural subtyping contravariance of contravariant Functors. could be implemented as contramap(identity), but the Functor laws say this is equivalent
Attributes
- Inherited from:
- Contravariant
- Source:
- Contravariant.scala
Combine an F[A]
and an F[B]
into an F[(A, B)]
that maintains the effects of both fa
and fb
.
Combine an F[A]
and an F[B]
into an F[(A, B)]
that maintains the effects of both fa
and fb
.
Example:
scala> import cats.implicits._
scala> val noneInt: Option[Int] = None
scala> val some3: Option[Int] = Some(3)
scala> val noneString: Option[String] = None
scala> val someFoo: Option[String] = Some("foo")
scala> Semigroupal[Option].product(noneInt, noneString)
res0: Option[(Int, String)] = None
scala> Semigroupal[Option].product(noneInt, someFoo)
res1: Option[(Int, String)] = None
scala> Semigroupal[Option].product(some3, noneString)
res2: Option[(Int, String)] = None
scala> Semigroupal[Option].product(some3, someFoo)
res3: Option[(Int, String)] = Some((3,foo))
Attributes
- Inherited from:
- Semigroupal
- Source:
- Semigroupal.scala