hedgehog-classes-0.1.0.0: src/Hedgehog/Classes.hs
{-| This library provides sets of properties that should hold for common
typeclasses.
/Note:/ on GHC < 8.5, this library uses the higher-kinded typeclasses
('Data.Functor.Classes.Show1', 'Data.Functor.Classes.Eq1', 'Data.Functor.Classes.Ord1', etc.),
but on GHC >= 8.5, it uses `-XQuantifiedConstraints` to express these
constraints more cleanly.
-}
module Hedgehog.Classes
( -- * Running
lawsCheck
, lawsCheckOne
, lawsCheckMany
-- * Properties
-- ** Ground types
, bitsLaws
, eqLaws
, integralLaws
, monoidLaws
, commutativeMonoidLaws
, ordLaws
-- , ixLaws
, enumLaws
, boundedEnumLaws
, semigroupLaws
, commutativeSemigroupLaws
, exponentialSemigroupLaws
, idempotentSemigroupLaws
, rectangularBandSemigroupLaws
, showLaws
, showReadLaws
, storableLaws
, genericLaws
, jsonLaws
-- ** Unary type constructors
, alternativeLaws
, applicativeLaws
, contravariantLaws
, foldableLaws
, functorLaws
, monadLaws
-- , monadFixLaws
, monadIOLaws
, monadPlusLaws
, monadZipLaws
, traversableLaws
-- ** Binary type constructors
, arrowLaws
, bifoldableLaws
, bifoldableFunctorLaws
, bifunctorLaws
, bitraversableLaws
, categoryLaws
, commutativeCategoryLaws
-- * Defining your own laws
, Laws(..)
, LawContext(..)
, Context(..)
, contextualise
-- * Hedgehog equality tests sans source information
, hLessThan, hGreaterThan
, heq, heq1, heq2
, heqCtx, heqCtx1, heqCtx2
, hneq, hneq1, hneq2
, hneqCtx, hneqCtx1, hneqCtx2
) where
import Hedgehog.Classes.Alternative (alternativeLaws)
import Hedgehog.Classes.Applicative (applicativeLaws)
import Hedgehog.Classes.Arrow (arrowLaws)
import Hedgehog.Classes.Bifoldable (bifoldableLaws, bifoldableFunctorLaws)
import Hedgehog.Classes.Bifunctor (bifunctorLaws)
import Hedgehog.Classes.Bitraversable (bitraversableLaws)
import Hedgehog.Classes.Bits (bitsLaws)
import Hedgehog.Classes.Category (categoryLaws, commutativeCategoryLaws)
import Hedgehog.Classes.Common
import Hedgehog.Classes.Contravariant (contravariantLaws)
import Hedgehog.Classes.Enum (enumLaws, boundedEnumLaws)
import Hedgehog.Classes.Eq (eqLaws)
import Hedgehog.Classes.Foldable (foldableLaws)
import Hedgehog.Classes.Functor (functorLaws)
import Hedgehog.Classes.Generic (genericLaws)
import Hedgehog.Classes.Integral (integralLaws)
--import Hedgehog.Classes.Ix (ixLaws)
import Hedgehog.Classes.Json (jsonLaws)
import Hedgehog.Classes.Monad (monadLaws)
import Hedgehog.Classes.MonadIO (monadIOLaws)
import Hedgehog.Classes.MonadPlus (monadPlusLaws)
import Hedgehog.Classes.MonadZip (monadZipLaws)
import Hedgehog.Classes.Monoid (monoidLaws, commutativeMonoidLaws)
import Hedgehog.Classes.Ord (ordLaws)
import Hedgehog.Classes.Semigroup (semigroupLaws, commutativeSemigroupLaws, exponentialSemigroupLaws, idempotentSemigroupLaws, rectangularBandSemigroupLaws)
import Hedgehog.Classes.Show (showLaws)
import Hedgehog.Classes.ShowRead (showReadLaws)
import Hedgehog.Classes.Storable (storableLaws)
import Hedgehog.Classes.Traversable (traversableLaws)