
cats.laws.AlternativeLaws.scala Maven / Gradle / Ivy
The newest version!
package cats
package laws
import cats.syntax.all._
trait AlternativeLaws[F[_]] extends ApplicativeLaws[F] with MonoidKLaws[F] {
implicit override def F: Alternative[F]
implicit def algebra[A]: Monoid[F[A]] = F.algebra[A]
def alternativeRightAbsorption[A, B](ff: F[A => B]): IsEq[F[B]] =
(F.empty[A] ap ff) <-> F.empty[B]
def alternativeLeftDistributivity[A, B](fa: F[A], fa2: F[A], f: A => B): IsEq[F[B]] =
((fa |+| fa2) map f) <-> ((fa map f) |+| (fa2 map f))
def alternativeRightDistributivity[A, B](fa: F[A], ff: F[A => B], fg: F[A => B]): IsEq[F[B]] =
(fa ap (ff |+| fg)) <-> ((fa ap ff) |+| (fa ap fg))
}
object AlternativeLaws {
def apply[F[_]](implicit ev: Alternative[F]): AlternativeLaws[F] =
new AlternativeLaws[F] { def F: Alternative[F] = ev }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy