All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cats.laws.ContravariantLaws.scala Maven / Gradle / Ivy

The newest version!
package cats
package laws

import cats.functor.Contravariant
import cats.syntax.contravariant._

/**
 * Laws that must be obeyed by any `cats.functor.Contravariant`.
 */
trait ContravariantLaws[F[_]] extends InvariantLaws[F] {
  implicit override def F: Contravariant[F]

  def contravariantIdentity[A](fa: F[A]): IsEq[F[A]] =
    fa.contramap(identity[A]) <-> fa

  def contravariantComposition[A, B, C](fa: F[A], f: B => A, g: C => B): IsEq[F[C]] =
    fa.contramap(f).contramap(g) <-> fa.contramap(f compose g)
}

object ContravariantLaws {
  def apply[F[_]](implicit ev: Contravariant[F]): ContravariantLaws[F] =
    new ContravariantLaws[F] { def F: Contravariant[F] = ev }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy