úÎ!# íA      !"#$%&'()*+,-./0123456789:;<=>?@"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;ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwNoneX^quickcheck-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 x typeclass also have yL 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.NoneXq2zquickcheck-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+.z…NoneFXq‘‡ˆ‰ŠNoneXq&Oquickcheck-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: 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+. NoneXq,Àquickcheck-classes#Tests the following alt properties:  LiftF2 (1)() "a ‘ ~ NoneXq0Ø 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 • ~  NoneXq3» quickcheck-classes+Tests the following alternative properties:  Left Identity– — x "a xRight Identityx — – "a x Associativitya — (b — c) "a (a — b) — c)  NoneXq6 quickcheck-classes#Tests the following alt properties:  Associativity(a ˜ b) ˜ c "a a ˜ (b ˜ c)Left Distributivityf ™ (a ˜ b) "a (f ™ a) ˜ (f ™ b)  NoneXAZ 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. NoneXG quickcheck-classesTests the following properties:  Transitivea == b "' b == c !Ò a == c Symmetrica == b !Ò b == a Reflexivea == aûSome 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.NoneXqQquickcheck-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,HXqS›quickcheck-classes'Tests the following functor properties: Identity¸ ~ "a ~ Composition¸ (f  g) "a ¸ f  ¸ gConst(¹) "a ¸ ²None>Xq]6º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.º¾NoneX`”quickcheck-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€nquickcheck-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 typequickcheck-classesinput element typequickcheck-classesinput element typequickcheck-classesinput element typequickcheck-classes element typequickcheck-classes map functionquickcheck-classes element typequickcheck-classestraverse function quickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classes map function!quickcheck-classesinput element typequickcheck-classesoutput element typequickcheck-classestraverse function ! !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"NoneXqˆ†#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 Ã#NoneXqŠ)Äquickcheck-classesTests the following Å properties:  Left ZeroÆ s  f "a Æ sÄNoneXq¾$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‘R%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˜f&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.&'NoneXšû(quickcheck-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 > b(NoneXqžr)quickcheck-classes#Tests the following alt properties:  Left IdentityÎ ˜ m "a mRight Identitym ˜ Î "a m*quickcheck-classesTests everything from altLaws, plus the following:  CongruencyÎ "a –)*None FHVX«Ì+quickcheck-classes Test that a Ï instance obey the several laws.Ðquickcheck-classesdestination pointerquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of prims to copyÑquickcheck-classesdestination arrayquickcheck-classesoffset into destination arrayquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of bytes to copyÒquickcheck-classesdestination arrayquickcheck-classesoffset into destination arrayquickcheck-classes source arrayquickcheck-classesoffset into source arrayquickcheck-classesnumber of bytes to copyÓquickcheck-classes array to fillquickcheck-classesoffset into arrayquickcheck-classesnumber of values to fillquickcheck-classesvalue to fill with+NoneXºê,quickcheck-classesTests the following properties:  Associativea Ô (b Ô c) "a (a Ô b) Ô c ConcatenationÕ as "a ¨ (Ô) asTimesÖ n a "a ¨ (Ô) (× n a)-quickcheck-classesTests the following properties:  Commutativea Ô b "a b Ô a>Note that this does not test associativity. Make sure to use ,! in addition to this set of laws..quickcheck-classesTests the following properties:  Idempotenta Ô a "a a>Note that this does not test associativity. Make sure to use ,] in addition to this set of laws. In literature, this class of semigroup is known as a band./quickcheck-classesTests the following properties: Rectangular Banda Ô b Ô a "a a>Note that this does not test associativity. Make sure to use ,! in addition to this set of laws.0quickcheck-classesTests the following properties:  ExponentialÖ n (a Ô b) "a Ö n a Ô Ö n b>Note that this does not test associativity. Make sure to use ,! in addition to this set of laws.,-./0NoneXqÂ1quickcheck-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+.2quickcheck-classesTests everything from 1 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+.12NoneXÊ·3quickcheck-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 03NoneXͪ4quickcheck-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)4 NoneXÔ¦5quickcheck-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.5!None FHVX׈6quickcheck-classes+Tests the following alternative properties: Set-Get(ã ptr ix a >> ä ptr ix') "a ’ aGet-Set(ä ptr ix >> ã ptr ix a) "a ’ a6"NoneXqá‘7quickcheck-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 y7NoneHi8quickcheck-classesLIn older versions of GHC, Proxy is not poly-kinded, so we provide Proxy2.:quickcheck-classesLIn older versions of GHC, Proxy is not poly-kinded, so we provide Proxy1.<quickcheck-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.=quickcheck-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.>quickcheck-classes‚A 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 2. 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.>quickcheck-classes/Element is type name paired with typeclass laws0 "#$%&'()*+,-./0123456789:;<=>0<>="&'( +,-0./3456  #$%)*712:;89ñ##$%&'() * + , - . /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV W!X"YZZ[[\]^_`aabbcddefgghijkkllmnoopqqrstuvvwwxxyyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽŒŒ‘’Œ“”Œ“•Œ–—Œ“˜Œ–™Œ–šŒ–›ŒœŒœžŸŒ‘ Œ¡¢£¤¥¦§Œ¨©Œ¨šŒ¨—Œ‘ªŒ‘«¬­®¬­¯Œ–°Œ–±Œ–²Œ–³Œ–´Œ–µ¬¶·Œ¸¹Œº»Œº¼½¾¿£¤ÀŒºÁŒºÂŒºÃŒÄÅŒÄÆŒÄÇŒÄÈŒÄÉŒ–ÊŒÄËŒÄÌŒÍÎÏŒÄÐŒœÑŒœÒŒ–ÓŒÄÔŒÄÕŒÄÖŒ–×£¤Ø£¤ÙŒÄÚŒœÛŒœÜŒ–ÝŒ–ÞߌàáŒàâŒàãäŒàåŒà挖猖茖éêŒëìŒë팖ðŒ–ñŒòóŒôõŒòö¬÷øùúûüýþÿŒ–Œ–Œ–Œ¬ŒŒ Œ– Œ Œ¡ Œ Œ ŒŒŒ ŒŒŒŒŒŒŒŒŒ Œ–!"#$£¤%Œ–&Œ'()1quickcheck-classes-0.6.0.0-DzDuZ05ehrhApVtkkHCQpiTest.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.BifunctorTest.QuickCheck.Classes.Apply#Test.QuickCheck.Classes.Applicative#Test.QuickCheck.Classes.AlternativeTest.QuickCheck.Classes.AltTest.QuickCheck.Classes.EnumTest.QuickCheck.Classes.Eq Test.QuickCheck.Classes.FoldableTest.QuickCheck.Classes.FunctorTest.QuickCheck.Classes.Generic Test.QuickCheck.Classes.IntegralTest.QuickCheck.Classes.JsonTest.QuickCheck.Classes.Monad!Test.QuickCheck.Classes.MonadFail!Test.QuickCheck.Classes.MonadPlus Test.QuickCheck.Classes.MonadZipTest.QuickCheck.Classes.MonoidTest.QuickCheck.Classes.OrdTest.QuickCheck.Classes.PlusTest.QuickCheck.Classes.Prim!Test.QuickCheck.Classes.Semigroup$Test.QuickCheck.Classes.Semigroupoid Test.QuickCheck.Classes.SemiringTest.QuickCheck.Classes.Show Test.QuickCheck.Classes.ShowRead Test.QuickCheck.Classes.Storable#Test.QuickCheck.Classes.TraversableLaws lawsTypeclasslawsPropertiesbitsLaws categoryLawscommutativeCategoryLaws bifunctorLaws applyLawsapplicativeLawsalternativeLawsaltLawsenumLawsboundedEnumLawseqLaws foldableLaws functorLaws integralLaws isListLaws foldrProp foldlProp foldlMPropmapPropimapProp imapMProp traverseProp generateProp generateMProp replicatePropreplicateMProp filterProp filterMProp mapMaybeProp mapMaybeMPropjsonLaws monadLaws monadPlusLaws monadZipLaws monoidLawscommutativeMonoidLawsordLawsplusLawsextendedPlusLawsprimLaws semigroupLawscommutativeSemigroupLawsidempotentSemigroupLawsrectangularBandSemigroupLawsexponentialSemigroupLawssemigroupoidLawscommutativeSemigroupoidLaws semiringLawsshowLaws showReadLaws storableLawstraversableLawsProxy2Proxy1 lawsCheck lawsCheckOne lawsCheckMany$fMonoidStatus$fSemigroupStatusShowReadPrecedence SmallList getSmallListLinearEquationTwo_linearEquationTwoX_linearEquationTwoYQuadraticEquation_quadraticEquationQuadratic_quadraticEquationLinear_quadraticEquationConstantLinearEquationMLinearEquation_linearEquationLinear_linearEquationConstantApply2 getApply2ApplygetApplyBottomBottomUndefined BottomValue LastNothing ChooseFirst ChooseSecondTriplemyForAllShrink nestedEq1 propNestedEq1toSpecialApplicativeflipPairapTransfunc1func2func3func4func5func6 reverseTriplefoldMapArunLinearEquationrunLinearEquationMrunQuadraticEquationrunLinearEquationTwobase Data.BitsBits FiniteBitsbifoldableLawsData.Bifunctor BifunctorData.Bifoldablebifold bifoldMapGHC.Baseidbifoldrmappend.memptyData.Semigroup.InternalappEndoEndobifoldableFunctorLawsbimap Text.Read readMaybeghc-prim GHC.TypesisTrue#eq1eq2Control.CategoryCategoryfirstsecond*semigroupoids-5.3.1-DMJPI0JbY0GGYxFptsuNFcData.Functor.Bind.Class<.>liftF2pure<*>$liftA2empty<|>Data.Functor.Alt Data.Functor<$>GHC.Enumsuccpred integer-gmpGHC.Integer.TypeIntegerIntfromEnumtoEnumBounded Data.FoldableFoldablefoldfoldMapfoldrfoldr'$!foldlfoldr1 GHC.MaybeJustunsnoctoListgetDualDualflipfoldl'foldl1nullconstFalseTruelengthgetSumSumfmap<$ genericLaws GHC.GenericsfromtoRep generic1Lawsfrom1to1return>>=ap monadFailLawsControl.Monad.Fail MonadFailfailmplusmzero>>liftM Control.Arrow***Control.Monad.ZipmzipArrowData.Functor.Pluszero(primitive-0.6.4.0-1mvPxVOk6Q6KOkWCZxqESfData.Primitive.TypesPrimcopyPrimArrayToPtrcopyMutablePrimArray copyPrimArray setPrimArray<>sconcatstimesGHC.List replicateData.Semigroupoid SemigroupoidGHC.Showshow showsPrec++showListreadGHC.Read readsPrecreadList Text.Show showListWithshowsreadListDefaultForeign.Storable pokeElemOff peekElemOffData.Traversable TraversabletraverseData.Functor.IdentityIdentityData.Functor.ComposeCompose sequenceAfoldMapDefault fmapDefault Applicative*QuickCheck-2.12.6.1-4a6Ozz7bfHzLQyA4XOD1DcTest.QuickCheck.Arbitrary ArbitraryOrderingMonoid Data.ProxyProxy