
cats.laws.discipline.FoldableTests.scala Maven / Gradle / Ivy
The newest version!
package cats
package laws
package discipline
import org.scalacheck.Arbitrary
import org.scalacheck.Prop._
import org.typelevel.discipline.Laws
trait FoldableTests[F[_]] extends Laws {
def laws: FoldableLaws[F]
def foldable[A: Arbitrary, B: Arbitrary](implicit
ArbFA: Arbitrary[F[A]],
B: Monoid[B],
EqB: Eq[B]
): RuleSet = {
new DefaultRuleSet(
name = "foldable",
parent = None,
"foldLeft consistent with foldMap" -> forAll(laws.leftFoldConsistentWithFoldMap[A, B] _),
"foldRight consistent with foldMap" -> forAll(laws.rightFoldConsistentWithFoldMap[A, B] _),
"exists consistent with find" -> forAll(laws.existsConsistentWithFind[A] _),
"forall consistent with exists" -> forAll(laws.forallConsistentWithExists[A] _),
"forall true if empty" -> forAll(laws.forallEmpty[A] _),
"exists is lazy" -> forAll(laws.existsLazy[A] _),
"forall is lazy" -> forAll(laws.forallLazy[A] _)
)
}
}
object FoldableTests {
def apply[F[_]: Foldable]: FoldableTests[F] =
new FoldableTests[F] { def laws: FoldableLaws[F] = FoldableLaws[F] }
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy