package scalaprops
package scalazlaws

import scalaprops.Property.forAll
import scalaprops.Properties.properties
import scalaz._

object band {
  def idempotency[A: Equal: Gen](implicit A: Band[A]): Property =
    forAll(A.bandLaw.idempotency _)

  def laws[A: Band: Equal: Gen]: Properties[ScalazLaw] =
    properties(ScalazLaw.band) (
      ScalazLaw.bandIdempotency -> idempotency[A]
    )

  def all[A: Band: Equal: Gen]: Properties[ScalazLaw] =
    Properties.fromProps(ScalazLaw.bandAll, semigroup.laws[A], band.laws[A])
}