{-# LANGUAGE CPP #-} {-# LANGUAGE KindSignatures #-} {-# OPTIONS_GHC -Wall #-} {-| This library provides sets of properties that should hold for common typeclasses. /Note:/ on GHC < 8.6, this library uses the higher-kinded typeclasses ('Data.Functor.Classes.Show1', 'Data.Functor.Classes.Eq1', 'Data.Functor.Classes.Ord1', etc.), but on GHC >= 8.6, it uses @-XQuantifiedConstraints@ to express these constraints more cleanly. -} module Test.QuickCheck.Classes ( -- * Running QCB.lawsCheck , QCB.lawsCheckMany , QCB.lawsCheckOne -- * Properties -- ** Ground types #if MIN_VERSION_base(4,7,0) , QCB.bitsLaws #endif , QCB.eqLaws , QCB.substitutiveEqLaws , QCB.numLaws , QCB.integralLaws , QCB.ixLaws #if MIN_VERSION_base(4,7,0) , QCB.isListLaws #endif #if HAVE_AESON , jsonLaws #endif , QCB.monoidLaws , QCB.commutativeMonoidLaws , QCB.semigroupMonoidLaws , QCB.ordLaws , QCB.enumLaws , QCB.boundedEnumLaws , primLaws , QCB.semigroupLaws , QCB.commutativeSemigroupLaws , QCB.exponentialSemigroupLaws , QCB.idempotentSemigroupLaws , QCB.rectangularBandSemigroupLaws #if HAVE_SEMIRINGS , semiringLaws , ringLaws , gcdDomainLaws , euclideanLaws #endif , QCB.showLaws , QCB.showReadLaws , QCB.storableLaws #if MIN_VERSION_base(4,5,0) , QCB.genericLaws , QCB.generic1Laws #endif #if HAVE_UNARY_LAWS -- ** Unary type constructors , QCB.alternativeLaws #if HAVE_SEMIGROUPOIDS , altLaws , applyLaws #endif , QCB.applicativeLaws , QCB.contravariantLaws , QCB.foldableLaws , QCB.functorLaws , QCB.monadLaws , QCB.monadPlusLaws , QCB.monadZipLaws #if HAVE_SEMIGROUPOIDS , plusLaws , extendedPlusLaws #endif , QCB.traversableLaws #endif #if HAVE_BINARY_LAWS -- ** Binary type constructors , QCB.bifoldableLaws , QCB.bifunctorLaws , QCB.bitraversableLaws , QCB.categoryLaws , QCB.commutativeCategoryLaws #if HAVE_SEMIGROUPOIDS , semigroupoidLaws , commutativeSemigroupoidLaws #endif #if HAVE_VECTOR , muvectorLaws #endif #endif -- * Types , QCB.Laws(..) , QCB.Proxy1(..) , QCB.Proxy2(..) ) where -- -- re-exports -- -- Ground Types #if MIN_VERSION_base(4,7,0) import Test.QuickCheck.Classes.IsList #endif #if HAVE_AESON import Test.QuickCheck.Classes.Json #endif import Test.QuickCheck.Classes.Prim #if HAVE_SEMIRINGS import Test.QuickCheck.Classes.Euclidean import Test.QuickCheck.Classes.Semiring import Test.QuickCheck.Classes.Ring #endif -- Unary type constructors #if HAVE_UNARY_LAWS #if HAVE_SEMIGROUPOIDS import Test.QuickCheck.Classes.Alt import Test.QuickCheck.Classes.Apply #endif #if HAVE_SEMIGROUPOIDS import Test.QuickCheck.Classes.Plus #endif #endif -- Binary type constructors #if HAVE_BINARY_LAWS #if HAVE_SEMIGROUPOIDS import Test.QuickCheck.Classes.Semigroupoid #endif #endif #if HAVE_VECTOR import Test.QuickCheck.Classes.MVector #endif import qualified Test.QuickCheck.Classes.Base as QCB