!GG      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF)None_GHIJSafeXq< KLMNOPQRSNone TUVWXYZ[\]None^_NoneSXE `abcdefghijklNone1Xq mnopqrstuvwxyz{|}~None NoneSX_ NoneSX_q!hedgehog-classesYou can provide a  to , , ,, ,or . The D is used to provide useful error messages in the event of a failure.hedgehog-classesMFails the test if the right argument is less than or equal to the left. see 7https://github.com/hedgehogqa/haskell-hedgehog/pull/196hedgehog-classesPFails the test if the right argument is greater than or equal to the left. see 7https://github.com/hedgehogqa/haskell-hedgehog/pull/196hedgehog-classesXPasses the test if the given arguments are not equal. Otherwise fails with the given .hedgehog-classesNPasses the test if the given arguments are not equal. Otherwise fails with .hedgehog-classesTPasses the test if the given arguments are equal. Otherwise fails with the given .hedgehog-classesJPasses the test if the given arguments are equal. Otherwise fails with . hedgehog-classesXPasses the test if the given arguments are not equal. Otherwise fails with the given . hedgehog-classesNPasses the test if the given arguments are not equal. Otherwise fails with . hedgehog-classesTPasses the test if the given arguments are equal. Otherwise fails with the given . hedgehog-classesJPasses the test if the given arguments are equal. Otherwise fails with . hedgehog-classesTPasses the test if the given arguments are equal. Otherwise fails with the given .hedgehog-classesJPasses the test if the given arguments are equal. Otherwise fails with .hedgehog-classesXPasses the test if the given arguments are not equal. Otherwise fails with the given .hedgehog-classesNPasses the test if the given arguments are not equal. Otherwise fails with . 44 444 None"#EX_ke hedgehog-classes8The context surrounding the property test of a law. Use  to turn this into a .hedgehog-classeslaw namehedgehog-classeslaw bodyhedgehog-classestypeclass namehedgehog-classes&how to show the specific property testhedgehog-classesHreduced equation, eg "LHS = RHS" where neither LHS nor RHS are reduciblehedgehog-classesA ] is the name of the typeclass and the set of named properties associated with that typeclass.hedgehog-classes For footnoteshedgehog-classesTurn a  into a .hedgehog-classesZA convenience function for testing the properties of a typeclass. For example, in GHCi:ZgenOrdering :: Gen Ordering; genOrdering = frequency [(1,pure EQ),(1,pure LT),(1,pure GT)]"lawsCheck (monoidLaws genOrdering):Monoid: Left Identity ' <interactive> passed 100 tests.;Monoid: Right Identity ' <interactive> passed 100 tests.:Monoid: Associativity ' <interactive> passed 100 tests.:Monoid: Concatenation ' <interactive> passed 100 tests.Truehedgehog-classesPA convenience function for testing many typeclass instances of a single type.=lawsCheckOne (word8 constantBounded) [jsonLaws, showReadLaws]IToJSON/FromJSON: Partial Isomorphism ' <interactive> passed 100 tests.KToJSON/FromJSON: Encoding equals value ' <interactive> passed 100 tests.NShow/Read: Partial Isomorphism: show/read ' <interactive> passed 100 tests.aShow/Read: Partial Isomorphism: show/read with initial space ' <interactive> passed 100 tests.XShow/Read: Partial Isomorphism: showsPrec/readsPrec ' <interactive> passed 100 tests.VShow/Read: Partial Isomorphism: showList/readList ' <interactive> passed 100 tests.gShow/Read: Partial Isomorphism: showListWith shows/readListDefault ' <interactive> passed 100 tests.Truehedgehog-classesRA convenience function for checking many typeclass instances of multiple types. Jimport Control.Applicative (liftA2) import Data.Map (Map) import Data.Set (Set) import qualified Data.List as List import qualified Data.Set as Set import qualified Data.Map as Map import qualified Hedgehog.Gen as Gen import qualified Hedgehog.Range as Range import Hedgehog (Gen) import Hedgehog.Classes -- Generate a small Set Int genSet :: Gen (Set Int) genSet = Set.fromList <$> (Gen.list (Range.linear 2 10) (Gen.int Range.constantBounded)) -- Generate a small Map String Int genMap :: Gen (Map String Int) genMap = Map.fromList <$> (liftA2 List.zip genStrings genInts) where rng = Range.linear 2 6 genStrings = Gen.list rng (Gen.string rng Gen.lower) genInts = Gen.list rng (Gen.int Range.constantBounded) commonLaws :: (Eq a, Monoid a, Show a) => Gen a -> [Laws] commonLaws p = [eqLaws p, monoidLaws p] tests :: [(String, [Laws])] tests = [ ("Set Int", commonLaws genSet) , ("Map String Int", commonLaws genMap) ]  Now, in GHCi:lawsCheckMany tests lTesting properties for common typeclasses... ------------- -- Set Int -- ------------- Eq: Transitive '  interactive% passed 100 tests. Eq: Symmetric '  interactive% passed 100 tests. Eq: Reflexive '  interactive$ passed 100 tests. Eq: Negation '  interactive- passed 100 tests. Monoid: Left Identity '  interactive. passed 100 tests. Monoid: Right Identity '  interactive- passed 100 tests. Monoid: Associativity '  interactive- passed 100 tests. Monoid: Concatenation '  interactiveg passed 100 tests. -------------------- -- Map String Int -- -------------------- Eq: Transitive '  interactive% passed 100 tests. Eq: Symmetric '  interactive% passed 100 tests. Eq: Reflexive '  interactive$ passed 100 tests. Eq: Negation '  interactive- passed 100 tests. Monoid: Left Identity '  interactive. passed 100 tests. Monoid: Right Identity '  interactive- passed 100 tests. Monoid: Associativity '  interactive- passed 100 tests. Monoid: Concatenation '  interactive- passed 100 tests. All tests succeeded True hedgehog-classesThe  you would like to check.hedgehog-classes if your tests pass,  otherwise.hedgehog-classesThe generator for your type.hedgehog-classes+Functions that take a generator and output .hedgehog-classes if your tests pass.  otherwise.hedgehog-classes6Pairs of type names and their associated laws to test.hedgehog-classes if your tests pass.  otherwise. NonefpKGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  NoneSXql, hedgehog-classesTests the following  laws:  Left Identity  f "a fRight Identityf   "a f Associativityf  (g  h) "a (f  g)  h!hedgehog-classesTests the following  laws:  Commutativityf  g "a g  f !NoneXsS"hedgehog-classesTests the following  laws: Conjunction Idempotencen  n "a nDisjunction Idempotencen  n "a nDouble Complement   "a idSet Bit n i "a n   i Clear Bit n i "a n   ( i)Complement Bit n i "a  n ( i) Clear Zero  i "a Set Zero  i "a  Test Zero  i "a Pop Zero  "a 0Count Leading Zeros of Zero  "a  ( :: a)Count Trailing Zeros of Zero  "a  ( :: a)"NoneSXqw#hedgehog-classesTests the following  laws:  Naturality (t  f) (t  g) "a t  , f g, for every applicative transformation tIdentity   "a  Composition   ( g1 g2)   f1 f2 "a  (   g1  f1) (   g2  f2)#NoneXkyP$hedgehog-classesTests the following  laws: Encoding Partial Isomorphism   "a $NoneSXq|'%hedgehog-classesTests the following  laws: Identity   "a First Identity  "a Second Identity  "a  Composition   "a     %NoneSXq=&hedgehog-classesTests the following  laws: Identity "a   FoldMap f g "a  (  f) (  g) Foldr f g z t "a  ( (  f) (  g) t) z'hedgehog-classesTests the following  /  laws:  Composition f g "a    f gFoldMap f g   h i "a  (f  h) (g  i)&'NoneSXq(hedgehog-classesTests the following  laws:  Arr Identity  "a Arr Composition (f  g) "a  f   gArr-First inverse ( f) "a  ( f)First Composition (f  g) "a  f   g Arrow Law 5 f    "a    f Arrow Law 6 f   (  g) "a  (  g)   f Arrow Law 7 ( f)   assoc "a  assoc  % f, where assoc ((a,b),c) = (a,(b,c))(NoneSXq3)hedgehog-classesTests the following  laws: Identity   v "a v Composition ()  u  v  w "a u  (v  w) Homomorphism f   x "a  (f x) Interchangeu   y "a  ( y)  uLiftA2 1  f x "a f  xLiftA2 2 f x y "a f  x  y)NoneSXq*hedgehog-classesTests the following  laws:  Left Identity  a "a aRight Identitya   "a a Associativitya  (b  c) "a (a  b)  c*NoneSXq+hedgehog-classesTests the following  laws: Identity  "a  Composition f   g "a  (g  f)+NoneX ,hedgehog-classesTests the following  laws: Succ-Pred Identity   "a Pred-Succ Identity   "a -hedgehog-classesTests the same laws as ,, but uses the  constraint to ensure that  and [ behave as though they are total. This should always be preferred if your type has a  instance.,-NoneX.hedgehog-classesTests the following  laws:  Reflexivityx  x "a Symmetryx  y "a y  x Transitivityx  y  y  z "a x  zNegationx  y "a  (x  y).NoneSX_q/hedgehog-classesTests the following  laws: Fold "a  FoldMap f "a  (  f) Foldr f z t "a  ( (  f) t) zFoldr' f z0 t "a  f'  t z0, where f' k x z = k  f x zFoldl f z t "a  ( ( (     f) t)) zFoldl' f z0 xs "a  f'  xs z0, where f' x k z = k  f z xFoldl1 f t "a let (x:xs) =  t in  f x xsFoldr1 f t "a let (xs,x) = unsnoc ( t) in  f x xsToList "a  (:) []Null "a  ( ( )) Length "a    ( ( 1));This additionally tests that the user's implementations of  and " are strict in their accumulators./NoneSXqF0hedgehog-classesTests the following  laws: Identity  "a  Composition f   g "a  (f  g)Const ( x) "a x 0None>SXqY1hedgehog-classesTests the following  laws: From-To Inverse   "a To-From Inverse   "a 1NoneXf2hedgehog-classesTests the following  laws: Quotient Remainder x y  y  ( x y) "a xDivision Modulus( x y)  y  ( x y) "a xInteger Roundtrip   "a 2NoneX3hedgehog-classesTests the following  /  laws: Encoding Partial Isomorphism   "a Encoding Equals Value   "a   3NoneSXq94hedgehog-classesTests the following  laws:  Left Identity a  k "a k aRight Identitym   "a m Associativitym  (\x -> k x  h) "a (m  k)  hReturn "a Ap f x "a f  x4NoneSXq<5hedgehog-classesTests the following   laws: Return    "a Lift  (m  f) "a   m  (   f)5 NoneSXq6hedgehog-classesTests the following   laws:  Left Identity    "a Right Identity     "a  Associativity  a (  b c) "a   (  a b) c Left Zero   f "a   Right Zerov    "a  6!NoneSXq7hedgehog-classesTests the following  laws:  Naturality (f  g) ( ma mb) "a  ( f ma) ( g mb)7"NoneX8hedgehog-classesTests the following  laws:  Left Identity  "a Right Identity   "a  Associativity a ( b c) "a  ( a b) c Concatenation "a   9hedgehog-classesTests the following  laws:  Commutativity a b "a  b a89#NoneX:hedgehog-classesTests the following  laws:  Antisymmetryx  y  y  x "a x  y Transitivityx  y  y  z "a x  z Reflexivityx  x "a Totalityx  y  y  x "a :$NoneX;hedgehog-classesTests the following  laws:  Associativitya  (b  c) "a (a  b)  c Concatenation "a  ()Times n a "a  () ( n a)<hedgehog-classesTests the following  laws:  Commutativitya  b "a b  a=hedgehog-classesTests the following  laws: Exponentiality n (a  b) "a  n a   n b>hedgehog-classesTests the following  laws:  Idempotencya  a "a a?hedgehog-classesTests the following  laws: Rectangular Bandednessa  b  a "a a;<=>?%NoneSX;@hedgehog-classesTests the following  laws: Additive Left Identity  x "a xAdditive Right Identityx   "a xAdditive Associativityx  (y  z) "a (x  y)  zAdditive Commutativityx  y "a y  xMultiplicative Left Identity  x "a x Multiplicative Right Identityx   "a x Multiplicative Associativityx  (y  z) "a (x  y)  z -Multiplicatiion Left-Distributes Over Addtionx  (y  z) "a (x  y)  (x  z) -Multiplication Right-Distibutes Over Addition(y  z)  x "a (y  x)  (z  x) Multiplicative Left Annihilation  x "a  !Multiplicative Right Annihilationx   "a  Ahedgehog-classesTests the following   laws: Additive Inverse! x  x "a Bhedgehog-classesTests the following " laws:  Asteration# x "a   x  # xAPlus$ x "a x  # x@AB&NoneXוChedgehog-classesTests the following % laws: ShowsPrec Zero& a "a ' 0 a ""ShowsPrec Equivariance' p a r ( s "a 'showsPrec p a (r ( s)ShowsPrec ShowList) as r ( s "a ) as (r ( s)C'NoneX5Dhedgehog-classesTests the following % / * laws: Partial Isomorphism: show/readK  & "a 1Partial Isomorphism: show/read with initial spaceK  (" " ()  & "a 'Partial Isomorphism: showsPrec/readPrec(a,"") + , p (' p a "") "a &Partial Isomorphism: showList/readList(as,"") + - () as "") "a 7Partial Isomorphism: showListWith shows/readListDefault(as,"") + . (/ 0 as "") "a D(NoneXEhedgehog-classesTests the following 1 laws: Set-Get2 ptr ix a  3 ptr ix "a  aGet-Set3 ptr ix  2 ptr ix "a  (). (Putting back what you got out has no effect)List Conversion RoundtripsCMallocing a list and then reconstructing it gives you the same listPeekElemOff/Peek3 a i "a 4 (5 a (i  6 ))PokeElemOff/Poke2 a i x "a 7 (5 a (i  6 )) xPeekByteOff/Peek8 a i "a 4 (5 a i)PokeByteOff/Peek9 a i x "a 7 (5 a i) xE)NoneSX_qNFhedgehog-classesTests the following : laws:  Naturalityt  ; f "a ; (t + f), for every applicative transformation tIdentity;  "a  Composition; (   g  f) "a    (; g)  ; fSequenceA Naturalityt  < "a <  * t, for every applicative transformation tSequenceA Identity<    "a SequenceA Composition<    "a    <  <FoldMap "a =Fmap "a >FNoneG  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG$".289:,-;<=>?31@ABCDE*)+/04567F(&'%# !    ? * + * , - . / 0 1 2 3 4 5 6 7 8 9 : : ; < = > ? @ @ A B C D E F G HIJKLMNOPQRSTUVWXYZ[\ ]!^"_"`#a$b$c$d$e$f%g%h%i&j'k(l)mnopqrstuvwxyz{|}}~  rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r r      rrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)*r)+r),r-.r-/r01r02r-3r-4r-5r06r-789:8;<8=8=r>?89@rArBrCrDrEFrEGrHrIrJrKrLMrLNrOrP Q R SrTrUrVrWrXYZ[\Z[]Z[2Z[^Z[1Z[_Z[`ZabZacZadrefregrehrirejrklrmrknrkorkprqrresrturtvrtwrtxryzrt{rt|rt}rt~rrrrr+hedgehog-classes-0.2-KUVnSFNmFrQCqpkMN4My3OHedgehog.ClassesHedgehog.Classes.Common.BottomHedgehog.Classes.Common.CompatHedgehog.Classes.Common.FuncHedgehog.Classes.Common.ApTransHedgehog.Classes.Common.Gen Hedgehog.Classes.Common.EquationHedgehog.Classes.Common.IOHedgehog.Classes.Common.PP Hedgehog.Classes.Common.PropertyHedgehog.Classes.Common.LawsHedgehog.Classes.CommonHedgehog.Classes.CategoryHedgehog.Classes.BitsHedgehog.Classes.BitraversableHedgehog.Classes.BinaryHedgehog.Classes.BifunctorHedgehog.Classes.BifoldableHedgehog.Classes.ArrowHedgehog.Classes.ApplicativeHedgehog.Classes.AlternativeHedgehog.Classes.ContravariantHedgehog.Classes.EnumHedgehog.Classes.EqHedgehog.Classes.FoldableHedgehog.Classes.FunctorHedgehog.Classes.GenericHedgehog.Classes.IntegralHedgehog.Classes.JsonHedgehog.Classes.MonadHedgehog.Classes.MonadIOHedgehog.Classes.MonadPlusHedgehog.Classes.MonadZipHedgehog.Classes.MonoidHedgehog.Classes.OrdHedgehog.Classes.SemigroupHedgehog.Classes.SemiringHedgehog.Classes.ShowHedgehog.Classes.ShowReadHedgehog.Classes.StorableHedgehog.Classes.TraversableContext NoContext hLessThan hGreaterThanhneqCtxhneqheqCtxheqhneqCtx1hneq1heqCtx1heq1heqCtx2heq2hneqCtx2hneq2 LawContextlawContextLawNamelawContextLawBodylawContextTcNamelawContextTcProplawContextReducedLaws lawsTypeClasslawsProperties contextualise lawsCheck lawsCheckOne lawsCheckMany categoryLawscommutativeCategoryLawsbitsLawsbitraversableLaws binaryLaws bifunctorLawsbifoldableLawsbifoldableFunctorLaws arrowLawsapplicativeLawsalternativeLawscontravariantLawsenumLawsboundedEnumLawseqLaws foldableLaws functorLaws genericLaws integralLawsjsonLaws monadLaws monadIOLaws monadPlusLaws monadZipLaws monoidLawscommutativeMonoidLawsordLaws semigroupLawscommutativeSemigroupLawsexponentialSemigroupLawsidempotentSemigroupLawsrectangularBandSemigroupLaws semiringLawsringLawsstarLawsshowLaws showReadLaws storableLawstraversableLawsBottomBottomUndefined BottomValue genBottombase Text.Read readMaybeeqneqeq1neq1eq2neq2show1show2Triplefunc1func2func3func4func5func6 reverseTriple genTripleapTranstoSpecialApplicative genSmallSumgenSmallIntegergenSmallNonEmptyList genSmallListgenVerySmallListgenSmallStringgenShowReadPrecedence genComposegenTuple genTuple3 genValidRange genInRange genSetInteger CubicEquation_cubicEquationCubic_cubicEquationQuadratic_cubicEquationLinear_cubicEquationConstantLinearEquationTwo_linearEquationTwoX_linearEquationTwoY_linearEquationTwoConstantLinearEquationMLinearEquation_linearEquationLinear_linearEquationConstantQuadraticEquation_quadraticEquationQuadratic_quadraticEquationLinear_quadraticEquationConstantgenQuadraticEquationrunQuadraticEquationrunLinearEquationgenLinearEquationrunLinearEquationMgenLinearEquationMgenLinearEquationTworunLinearEquationTwogenCubicEquationrunCubicEquationgenIOshowIO renderResultppResultbardaggerghc-prim GHC.TypesTrueFalse congruent congruencynewlinetabtab2lawWherereducedControl.CategoryCategoryid. Data.BitsBits.&..|. complementGHC.BasesetBitbitclearBitxorzeroBitstestBitpopCountcountLeadingZeros finiteBitSizeGHC.Err undefinedcountTrailingZerosData.Bitraversable Bitraversable bitraverseData.Functor.IdentityIdentityData.Functor.ComposeComposefmapbinary-0.8.6.0Data.Binary.ClassBinary Data.BinarydecodeencodeData.Bifunctor BifunctorbimapfirstsecondData.Bifoldable Bifoldablebifold bifoldMapbifoldrmappendmemptyData.Semigroup.InternalappEndoEndo Control.ArrowArrowarr>>> Data.Tuplefst*** Applicativepure<*>$liftA2 Data.Functor<$> Alternativeempty<|>Data.Functor.Contravariant Contravariant contramapGHC.EnumEnumsuccpredBounded GHC.ClassesEq==&&/=not Data.FoldableFoldablefoldfoldMapfoldrfoldr'foldl$!getDualDualflipfoldl'foldl1toListfoldr1nullconstlengthgetSumSumFunctor<$ GHC.GenericsGenericfromtoGHC.RealIntegralquotGHC.Num*+remdivmod fromInteger toInteger$aeson-1.4.3.0-CKhfOL9YUanCoDzOlq0iJCData.Aeson.Types.ToJSONToJSONData.Aeson.Types.FromJSONFromJSON Data.Aeson GHC.MaybeJusttoJSONMonadreturn>>=apControl.Monad.IO.ClassMonadIOliftIO MonadPlusmplusmzero>>Control.Monad.ZipMonadZipmzipMonoidmconcatOrd<=|| Semigroup<>sconcatstimesGHC.List replicate(semirings-0.3.1.2-7HOi7d1FlbK71R98pYzDDJ Data.SemiringSemiringzerooneRingnegate Data.StarStarstaraplusGHC.ShowShowshow showsPrec++showListGHC.ReadReadelem readsPrecreadListreadListDefault Text.Show showListWithshowsForeign.StorableStorable pokeElemOff peekElemOffpeekGHC.PtrplusPtrsizeOfpoke peekByteOff pokeByteOffData.Traversable Traversabletraverse sequenceAfoldMapDefault fmapDefault