package scalaprops package scalazlaws import scalaprops.Property.forAll import scalaprops.Properties.properties import scalaz._ object equal { def commutativity[A](implicit A: Equal[A], G: Gen[A]) = forAll(A.equalLaw.commutative _) def reflexive[A](implicit A: Equal[A], G: Gen[A]) = forAll(A.equalLaw.reflexive _) def transitive[A](implicit A: Equal[A], G: Gen[A]) = forAll(A.equalLaw.transitive _) def naturality[A](implicit A: Equal[A], G: Gen[A]) = forAll(A.equalLaw.naturality _) def laws[A](implicit A: Equal[A], G: Gen[A]): Properties[ScalazLaw] = properties(ScalazLaw.equal)( ScalazLaw.equalCommutativity -> commutativity[A], ScalazLaw.equalReflexive -> reflexive[A], ScalazLaw.equalTransitive -> transitive[A], ScalazLaw.equalNaturality -> naturality[A] ) def all[A](implicit A: Equal[A], G: Gen[A]): Properties[ScalazLaw] = laws[A] }