!3C$K      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ(None1MXqquickcheck-classes*A set of laws associated with a typeclass.quickcheck-classes+Name of the typeclass whose laws are testedquickcheck-classesPairs of law name and property>KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~NoneXquickcheck-classesTests the following properties: Conjunction Idempotence n .&. n "a nDisjunction Idempotence n .|. n "a nDouble Complementcomplement (complement n) "a nSet BitsetBit n i "a n .|. bit i Clear Bit'clearBit n i "a n .&. complement (bit i)Complement Bit!complementBit n i "a xor n (bit i) Clear ZeroclearBit zeroBits i "a zeroBitsSet ZerosetBit zeroBits i "a bit i Test ZerotestBit zeroBits i "a FalsePop ZeropopCount zeroBits "a 0Count Leading Zeros of Zero,countLeadingZeros zeroBits "a finiteBitSize "Count Trailing Zeros of Zero-countTrailingZeros zeroBits "a finiteBitSize "#All of the useful instances of the  typeclass also have L instances, so these property tests actually require that instance as well.Note:2 This property test is only available when using base-4.7 or newer.NoneXqquickcheck-classesTests the following  properties: Bifold Identity "a    BifoldMap Identity f g "a  (  f) (  g) Bifoldr Identity f g z t "a  ( (  f) (  g) t) zNoteH: This property test is only available when this package is built with  base-4.10+ or transformers-0.5+.quickcheck-classesTests the following 'Bifunctor'/'Bifoldable' properties: Bifold Identity f g "a    f gBifoldMap Identity f g   h i "a  (f  h) (g  i)NoteH: This property test is only available when this package is built with  base-4.10+ or transformers-0.5+.NoneFXqNoneXq&quickcheck-classesTests the following  properties: Right Identityf   "a f Left Identity  f "a f Associativityf  (g  h) "a (f  g)  hNoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+.quickcheck-classesTest everything from  plus the following:  Commutativef  g "a g  fNoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+.NoneXq- quickcheck-classesTests the following  properties:  Naturality (t  f) (t  g) "a t   f g& for every applicative transformation tIdentity   "a  Composition   ( g1 g2)   f1 f2 "a  (   g1 g2  f1) (   g2  f2)NoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+. NoneXq1 quickcheck-classesTests the following  properties: Identity   "a First Identity  "a Second Identity  "a Bifunctor Composition f g "a  f   g NoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+.  NoneSXq4K quickcheck-classes#Tests the following alt properties:  LiftF2 (1)() "a   Associativity () u  v  w "a u  (v  w)  NoneXq8c quickcheck-classes+Tests the following applicative properties: Identity   v "a v Composition ()  u  v  w "a u  (v  w) Homomorphism f   x "a  (f x) Interchangeu   y "a  ( y)  u LiftA2 (1)() "a    NoneXq;F quickcheck-classes+Tests the following alternative properties:  Left Identity  x "a xRight Identityx   "a x Associativitya  (b  c) "a (a  b)  c)  NoneXq> quickcheck-classes#Tests the following alt properties:  Associativity(a  b)  c "a a  (b  c)Left Distributivityf  (a  b) "a (f  a)  (f  b) None,HXq@vquickcheck-classes-Tests the following contravariant properties: Identity  "a  Composition f   g "a  (g  f)NoneXK@quickcheck-classesTests the following properties: Succ Pred Identity ( x) "a xPred Succ Identity ( x) "a xThis only works for Enum+ types that are not bounded, meaning that  and T must be total. This means that these property tests work correctly for types like  but not for .'Sadly, there is not a good way to test  and =, since many types that have reasonable implementations for  and  have more inhabitants than  does.quickcheck-classesTests the same properties as - except that it requires the type to have a u instance. These tests avoid taking the successor of the maximum element or the predecessor of the minimal element.NoneXQquickcheck-classesTests the following properties:  Transitivea == b "' b == c ! a == c Symmetrica == b ! b == a Reflexivea == aSome of these properties involve implication. In the case that the left hand side of the implication arrow does not hold, we do not retry. Consequently, these properties only end up being useful when the data type has a small number of inhabitants.NoneSXqZquickcheck-classesTests the following  properties: fold "a  foldMap f "a  ( . f) foldr f z t "a  ( ( . f) t ) zfoldr' f z0 xs "a let f' k x z = k  f x z in  f'  xs z0foldr1 f t "a let  (xs,x) =  ( t) in  f x xsfoldl f z t "a  ( ( ( .  .  f) t)) zfoldl' f z0 xs "a let f' x k z = k  f z x in  f'  xs z0foldl1 f t "a let x : xs =  t in  f x xstoList "a  (:) []null "a  ( ( )) length "a  .  ( ( 1))%Note that this checks to ensure that foldl' and foldr' are suitably strict.None,HXq]quickcheck-classes'Tests the following functor properties: Identity  "a  Composition (f  g) "a  f   gConst() "a  None>Xqg$quickcheck-classesTests the following properties: From-To Inverse   "a To-From Inverse   "a Note:2 This property test is only available when using base-4.5 or newer.Note:  and . don't actually care about the type variable x in  a x , so here we instantiate it to '()'. by default. If you would like to instantiate x. as something else, please file a bug report.quickcheck-classesTests the following properties: From-To Inverse   "a To-From Inverse   "a Note:2 This property test is only available when using base-4.9 or newer.NoneXjquickcheck-classesTests the following properties: Quotient Remainder(quot x y) * y + (rem x y) "a xDivision Modulus(div x y) * y + (mod x y) "a xInteger RoundtripfromInteger (toInteger x) "a xNone >HSVX\quickcheck-classesTests the following properties: Partial IsomorphismfromList . toList "a idLength Preservation&fromList xs "a fromListN (length xs) xsNote:2 This property test is only available when using base-4.7 or newer.quickcheck-classesProperty for the generate^ function, which builds a container of a given length by applying a function to each index.#quickcheck-classesProperty for the filterD function, which keeps elements for which the predicate holds true.$quickcheck-classesProperty for the filterM^ function, which keeps elements for which the predicate holds true in an applicative context.%quickcheck-classesProperty for the mapMaybeD function, which keeps elements for which the predicate holds true.quickcheck-classesinput element typequickcheck-classesfoldr functionquickcheck-classesinput element typequickcheck-classesfoldl functionquickcheck-classesinput element typequickcheck-classesmonadic foldl functionquickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classes map functionquickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classesindexed map functionquickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classesmonadic indexed map functionquickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classestraverse functionquickcheck-classesinput element type quickcheck-classesinput element type!quickcheck-classesinput element type"quickcheck-classesinput element type#quickcheck-classes element typequickcheck-classes map function$quickcheck-classes element typequickcheck-classestraverse function%quickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classes map function&quickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classestraverse function !"#$%& !"#$%&NoneXT'quickcheck-classesTests the various  properties:  (l,u) i   i ( (l,u)) (l,u)   (l,u) i  i, when  (l,u) i  ( (l,u)) ( (l,u))  [0 ..  (l,u) - 1]  (l,u)   ( (l,u))'NoneX(quickcheck-classesTests the following properties: Partial Isomorphismdecode . encode "a JustEncoding Equals Valuedecode . encode "a Just . toJSON8Note that in the second property, the type of decode is ByteString -> Value, not ByteString -> a(NoneX)quickcheck-classes Test that a  instance obey several laws.)NoneXqD*quickcheck-classes'Tests the following monadic properties:  Left Identity a  k "a k aRight Identitym   "a m Associativitym  (\x -> k x  h) "a (m  k)  hReturn "a Ap() "a *NoneXqquickcheck-classesTests the following  properties:  Left Zero s  f "a  sNoneXq|+quickcheck-classes*Tests the following monad plus properties:  Left Identity  x "a xRight Identity x  "a x Associativity a ( b c) "a  ( a b) c)  Left Zero  f "a  Right Zerom   "a +NoneXq,quickcheck-classes/Tests the following monadic zipping properties:  Naturality (f  g) ( ma mb) =  ( f ma) ( g mb)&In the laws above, the infix function " refers to a typeclass method of .,NoneX$-quickcheck-classesTests the following properties:  Associative1mappend a (mappend b c) "a mappend (mappend a b) c Left Identitymappend mempty a "a aRight Identitymappend a mempty "a a Concatenation$mconcat as "a foldr mappend mempty as.quickcheck-classesTests the following properties:  Commutativemappend a b "a mappend b aJNote that this does not test associativity or identity. Make sure to use -! in addition to this set of laws.-./NoneX50quickcheck-classesTests the following properties: Additive Commutativity a + b "a b + aAdditive Left Identity 0 + a "a aAdditive Right Identity a + 0 "a aMultiplicative Associativitya * (b * c) "a (a * b) * cMultiplicative Left Identity 1 * a "a aMultiplicative Right Identity a * 1 "a a-Multiplication Left Distributes Over Additiona * (b + c) "a (a * b) + (a * c).Multiplication Right Distributes Over Addition(a + b) * c "a (a * c) + (b * c) Multiplicative Left Annihilation 0 * a "a 0!Multiplicative Right Annihilation a * 0 "a 0Additive Inverse a  a "a 00 NoneX1quickcheck-classesTests the following properties:  Antisymmetrya "d b "' b "d a ! a = b  Transitivitya "d b "' b "d c ! a "d cTotality a "d b "( a > b1!NoneXq=2quickcheck-classes#Tests the following alt properties:  Left Identity  m "a mRight Identitym   "a m3quickcheck-classesTests everything from altLaws, plus the following:  Congruency "a 23"None FHVX×4quickcheck-classes Test that a  instance obey the several laws.quickcheck-classesdestination pointerquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of prims to copyquickcheck-classesdestination arrayquickcheck-classesoffset into destination arrayquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of bytes to copyquickcheck-classesdestination arrayquickcheck-classesoffset into destination arrayquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of bytes to copyquickcheck-classes array to fillquickcheck-classesoffset into arrayquickcheck-classesnumber of values to fillquickcheck-classesvalue to fill with4#NoneX&5quickcheck-classesTests the following properties: Additive Inverse a  a "a 07Note that this does not test any of the laws tested by $%.5&NoneXD6quickcheck-classesTests the following properties:  Associativea  (b  c) "a (a  b)  c Concatenation as "a  () asTimes n a "a  () ( n a)7quickcheck-classesTests the following properties:  Commutativea  b "a b  a>Note that this does not test associativity. Make sure to use 6! in addition to this set of laws.8quickcheck-classesTests the following properties:  Idempotenta  a "a a>Note that this does not test associativity. Make sure to use 6] in addition to this set of laws. In literature, this class of semigroup is known as a band.9quickcheck-classesTests the following properties: Rectangular Banda  b  a "a a>Note that this does not test associativity. Make sure to use 6! in addition to this set of laws.:quickcheck-classesTests the following properties:  Exponential n (a  b) "a  n a   n b>Note that this does not test associativity. Make sure to use 6! in addition to this set of laws.6789:'NoneXqu;quickcheck-classesTests the following  properties:  Associativityf `o' (g `o' h) "a (f `o' g) `o' hNoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+.<quickcheck-classesTests everything from ; plus the following:  Commutativef `o' g "a g `o' fNoteH: This property test is only available when this package is built with  base-4.9+ or transformers-0.5+.;<$NoneX=quickcheck-classesTests the following properties: Additive Commutativity a + b "a b + aAdditive Left Identity 0 + a "a aAdditive Right Identity a + 0 "a aMultiplicative Associativitya * (b * c) "a (a * b) * cMultiplicative Left Identity 1 * a "a aMultiplicative Right Identity a * 1 "a a-Multiplication Left Distributes Over Additiona * (b + c) "a (a * b) + (a * c).Multiplication Right Distributes Over Addition(a + b) * c "a (a * c) + (b * c) Multiplicative Left Annihilation 0 * a "a 0!Multiplicative Right Annihilation a * 0 "a 0=(NoneX>quickcheck-classesTests the following properties: Show a "a  0 a ""Equivariance:  p a r  s "a  p a (r  s)Equivariance:  as r  s "a  as (r  s)>)NoneX?quickcheck-classesTests the following properties: Partial Isomorphism:  /  ( a) "a  aPartial Isomorphism:  /  with initial space (" " ++  a) "a  aPartial Isomorphism:  / (a,"") `elem`  p ( p a "")Partial Isomorphism:  / (as,"") `elem`  ( as "")Partial Isomorphism:   / (as,"") `elem`  (  as "")Note: When using base-4.5% or older, a shim implementation of  is used.?*None FHVX@quickcheck-classes+Tests the following alternative properties: Set-Get( ptr ix a >>  ptr ix') "a  aGet-Set( ptr ix >>  ptr ix a) "a  a@+NoneXqAquickcheck-classesTests the following  properties:  Naturalityt   f "a  (t  f)) for every applicative transformation tIdentity  "a  Composition (   g  f) "a    ( g)   fSequence Naturalityt   "a    t) for every applicative transformation tSequence Identity    "a Sequence Composition    "a      foldMap "a fmap "a  Where an applicative transformation is a function 1t :: (Applicative f, Applicative g) => f a -> g apreserving the  operations, i.e. Identity: t ( x) "a  xDistributivity: t (x  y) "a t x  t yANoneH"Bquickcheck-classesLIn older versions of GHC, Proxy is not poly-kinded, so we provide Proxy2.Dquickcheck-classesLIn older versions of GHC, Proxy is not poly-kinded, so we provide Proxy1.Fquickcheck-classesMA convenience function for testing properties in GHCi. For example, at GHCi:0lawsCheck (monoidLaws (Proxy :: Proxy Ordering))-Monoid: Associative +++ OK, passed 100 tests./Monoid: Left Identity +++ OK, passed 100 tests.0Monoid: Right Identity +++ OK, passed 100 tests.Assuming that the  instance for  + is good, we now have confidence that the   instance for   satisfies the monoid laws.Gquickcheck-classes[A convenience function that allows one to check many typeclass instances of the same type.GspecialisedLawsCheckMany (Proxy :: Proxy Word) [jsonLaws, showReadLaws]@ToJSON/FromJSON: Encoding Equals Value +++ OK, passed 100 tests.>ToJSON/FromJSON: Partial Isomorphism +++ OK, passed 100 tests.8Show/Read: Partial Isomorphism +++ OK, passed 100 tests.Hquickcheck-classesA convenience function for checking multiple typeclass instances of multiple types. Consider the following Haskell source file: Pimport Data.Proxy (Proxy(..)) import Data.Map (Map) import Data.Set (Set) -- A   for Set 1. setInt :: Proxy (Set Int) setInt = Proxy -- A   for Map  . mapInt :: Proxy (Map Int Int) mapInt = Proxy myLaws :: Proxy a -> [Laws] myLaws p = [eqLaws p, monoidLaws p] namedTests :: [(String, [Laws])] namedTests = [ ("Set Int", myLaws setInt) , ("Map Int Int", myLaws mapInt) ]  Now, in GHCi:lawsCheckMany namedTests Testing properties for common typeclasses ------------- -- Set Int -- ------------- Eq: Transitive +++ OK, passed 100 tests. Eq: Symmetric +++ OK, passed 100 tests. Eq: Reflexive +++ OK, passed 100 tests. Monoid: Associative +++ OK, passed 100 tests. Monoid: Left Identity +++ OK, passed 100 tests. Monoid: Right Identity +++ OK, passed 100 tests. Monoid: Concatenation +++ OK, passed 100 tests. ----------------- -- Map Int Int -- ----------------- Eq: Transitive +++ OK, passed 100 tests. Eq: Symmetric +++ OK, passed 100 tests. Eq: Reflexive +++ OK, passed 100 tests. Monoid: Associative +++ OK, passed 100 tests. Monoid: Left Identity +++ OK, passed 100 tests. Monoid: Right Identity +++ OK, passed 100 tests. Monoid: Concatenation +++ OK, passed 100 tests. HIn the case of a failing test, the program terminates with exit code 1.Hquickcheck-classes/Element is type name paired with typeclass laws: '()*+,-./0123456789:;<=>?@ABCDEFGH:FHG0'(-./1467:89=5>?@ *+,23A ;<)DEBC ,,-./0123 4 5 6 7 89:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \!]!^"_#`&a&b&c&d&e'f'g$%(h)i*j+kllmmnopqrssttuvvwxxyz{{|}~      !"#$%"&"'"(")*+*+ ,-. /0123245267898:;<2=8>?@?ABCBDBEBFBGHIJKLMNOP1quickcheck-classes-0.6.2.2-EVTnArjq5EbBRLSWz5T2hpTest.QuickCheck.ClassesTest.QuickCheck.Classes.IsListTest.QuickCheck.Classes.CommonTest.QuickCheck.Classes.Bits"Test.QuickCheck.Classes.BifoldableTest.QuickCheck.Classes.Compat Test.QuickCheck.Classes.Category%Test.QuickCheck.Classes.Bitraversable!Test.QuickCheck.Classes.BifunctorTest.QuickCheck.Classes.Apply#Test.QuickCheck.Classes.Applicative#Test.QuickCheck.Classes.AlternativeTest.QuickCheck.Classes.Alt%Test.QuickCheck.Classes.ContravariantTest.QuickCheck.Classes.EnumTest.QuickCheck.Classes.Eq Test.QuickCheck.Classes.FoldableTest.QuickCheck.Classes.FunctorTest.QuickCheck.Classes.Generic Test.QuickCheck.Classes.IntegralTest.QuickCheck.Classes.IxTest.QuickCheck.Classes.JsonTest.QuickCheck.Classes.MVectorVector.UnboxedMVectorTest.QuickCheck.Classes.Monad!Test.QuickCheck.Classes.MonadFail!Test.QuickCheck.Classes.MonadPlus Test.QuickCheck.Classes.MonadZipTest.QuickCheck.Classes.MonoidTest.QuickCheck.Classes.NumTest.QuickCheck.Classes.OrdTest.QuickCheck.Classes.PlusTest.QuickCheck.Classes.PrimTest.QuickCheck.Classes.Ring Test.QuickCheck.Classes.Semiring semiringLaws!Test.QuickCheck.Classes.Semigroup$Test.QuickCheck.Classes.SemigroupoidTest.QuickCheck.Classes.Show Test.QuickCheck.Classes.ShowRead Test.QuickCheck.Classes.Storable#Test.QuickCheck.Classes.TraversableLaws lawsTypeclasslawsPropertiesbitsLawsbifoldableLaws categoryLawscommutativeCategoryLawsbitraversableLaws bifunctorLaws applyLawsapplicativeLawsalternativeLawsaltLawscontravariantLawsenumLawsboundedEnumLawseqLaws foldableLaws functorLaws genericLaws generic1Laws integralLaws isListLaws foldrProp foldlProp foldlMPropmapPropimapProp imapMProp traverseProp generateProp generateMProp replicatePropreplicateMProp filterProp filterMProp mapMaybeProp mapMaybeMPropixLawsjsonLaws muvectorLaws monadLaws monadPlusLaws monadZipLaws monoidLawscommutativeMonoidLawssemigroupMonoidLawsnumLawsordLawsplusLawsextendedPlusLawsprimLawsringLaws semigroupLawscommutativeSemigroupLawsidempotentSemigroupLawsrectangularBandSemigroupLawsexponentialSemigroupLawssemigroupoidLawscommutativeSemigroupoidLawsshowLaws showReadLaws storableLawstraversableLawsProxy2Proxy1 lawsCheck lawsCheckOne lawsCheckMany$fMonoidStatus$fSemigroupStatusShowReadPrecedence VerySmallListgetVerySmallList SmallList getSmallListLinearEquationTwo_linearEquationTwoX_linearEquationTwoYQuadraticEquation_quadraticEquationQuadratic_quadraticEquationLinear_quadraticEquationConstantLinearEquationMLinearEquation_linearEquationLinear_linearEquationConstantApply2 getApply2ApplygetApplyBottomBottomUndefined BottomValue LastNothing ChooseFirst ChooseSecondTriplemyForAllShrink nestedEq1 propNestedEq1toSpecialApplicativeflipPairapTransfunc1func2func3func4func5func6 reverseTriplefoldMapArunLinearEquationrunLinearEquationMrunQuadraticEquationrunLinearEquationTwobase Data.BitsBits FiniteBitsData.Bifunctor BifunctorData.Bifoldablebifold bifoldMapGHC.Baseidbifoldrmappend.memptyData.Semigroup.InternalappEndoEndobifoldableFunctorLawsbimap Text.Read readMaybeghc-prim GHC.TypesisTrue#eq1eq1_2eq2Control.CategoryCategoryData.Bitraversable Bitraversable bitraverseData.Functor.IdentityIdentityData.Functor.ComposeComposefmapfirstsecond*semigroupoids-5.3.2-HmCuRjhFqcRIPXnVUs1PKGData.Functor.Bind.Class<.>liftF2pure<*>$liftA2empty<|>Data.Functor.Alt Data.Functor<$>Data.Functor.Contravariant contramapGHC.Enumsuccpred integer-gmpGHC.Integer.TypeIntegerIntfromEnumtoEnumBounded Data.FoldableFoldablefoldfoldMapfoldrfoldr'$!foldlfoldr1 GHC.MaybeJustunsnoctoListgetDualDualflipfoldl'foldl1nullconstFalseTruelengthgetSumSum<$ GHC.GenericsfromtoRepfrom1to1GHC.ArrIxinRange GHC.Classes==elemrangeGHC.List!!indexmap rangeSizereturn>>=ap monadFailLawsControl.Monad.Fail MonadFailfailmplusmzero>>liftM Control.Arrow***Control.Monad.ZipmzipArrowGHC.Numnegate+Data.Functor.Pluszero(primitive-0.7.0.0-9xMM76CsovTEGnXCHiCdRJData.Primitive.TypesPrimcopyPrimArrayToPtrcopyMutablePrimArray copyPrimArray setPrimArray&semirings-0.4.1-AKbyeXlHufVCIaEdHgOdun Data.Semiring<>sconcatstimes replicateData.Semigroupoid SemigroupoidGHC.Showshow showsPrec++showListreadGHC.Read readsPrecreadList Text.Show showListWithshowsreadListDefaultForeign.Storable pokeElemOff peekElemOffData.Traversable Traversabletraverse sequenceAfoldMapDefault fmapDefault Applicative(QuickCheck-2.13.1-1rO57X9FmbTEL9U6cBekOsTest.QuickCheck.Arbitrary ArbitraryOrderingMonoid Data.ProxyProxy