
cats.laws.discipline.InvariantTests.scala Maven / Gradle / Ivy
The newest version!
package cats
package laws
package discipline
import cats.functor.Invariant
import org.scalacheck.Arbitrary
import org.scalacheck.Prop
import Prop._
import org.typelevel.discipline.Laws
trait InvariantTests[F[_]] extends Laws {
def laws: InvariantLaws[F]
def invariant[A: Arbitrary, B: Arbitrary, C: Arbitrary](implicit
ArbFA: Arbitrary[F[A]],
EqFA: Eq[F[A]],
EqFC: Eq[F[C]]
): RuleSet = {
new DefaultRuleSet(
name = "invariant",
parent = None,
"invariant identity" -> forAll(laws.invariantIdentity[A] _),
"invariant composition" -> forAll(laws.invariantComposition[A, B, C] _))
}
}
object InvariantTests {
def apply[F[_]: Invariant]: InvariantTests[F] =
new InvariantTests[F] { def laws: InvariantLaws[F] = InvariantLaws[F] }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy