úÎYÂBÓ£      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€ ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ None<We copy the QuickCheck structure to make sure generators of @ partial values and equality checks handling partial values are  used. 2Declaring a property for possibly partial values. ?A modifier to indicate that partial values should be generated  (or tested, or both). "Helper for showing partial values &Helper for generating partial values: genPartial ib ia ga  generates £ with frequence ib and ga with frequency  ia.  ¤¥¦§¨©ª«¬­®¯°±²³K´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíî£ïðñòó   ¤¥¦§¨©ª«¬­®¯°±²³None ôõö÷øù     ôõö÷øùNoneQClass LawTest defines a test method, which returns a testable property, which we Qcan use to test a law for a type t. This class is independent of the actual laws 0to test - it can be used for Monoid, Monad, ... The s we handle are of this form. Parameters needed for  checking of the body #The type in the body of the forall 7The forall quantified part on the top level of the law 2A Theorem is a claim that a LHS equals a RHS - an  of length two. KAn equality proof is represented as a list of (at least two) equal values. !Contructing an equality theorem: lhs =.= rhs = [lhs, rhs]. Take a two-element theorem6 and an equality proof chain to splice in the middle. !CHelper function to test laws where arguments lack a Show instance. "HHelper function to test laws where we should care about partial values. #$Top level use of ClassLaws is often # someLaw $,Variant not needing a Show instance for the LawArgs %0Checking laws in the precense of partial values  !"#$% !"#$% !"#$% !"#$%None &Position in an equality proof '+A class for types which can be checked for ity, possibly  needing some extra eters. )The first function, )", returns a property implementing 2 an equality check. It takes a function that can run a value and a > comparison operator to a predicate (which in turn takes some = supposedly equal values, and a parameter needed for the run  function, and returns a ú). *The second function, *#, does the same, but now for pairs $ that are not necessarily runnable. + Variant of ) intended for  values. (Only the ? Show part differs - the user also needs to supply an equality  operator handling  values.) ,Similar variant of * for  values. - Local helper . Local helper / Local helper &'()*+,-./ &'()*+,-./ '()*+,-&./ &'()*+,-./ NoneÖûüýþÿ´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíî£ïðñòó      !"#$%&'()*+,-./01234ú56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk  !"#$%&'()*+,-./None0<We use the MyList datatype to provide instances that do not  satisfy some class laws. 01234567lmnopqrs012345670213456702134567lmnopqrsNone389:;<=>?@ABCDEFGHIJKLMNOtuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ89:;<=>?@ABCDEFGHIJKLMNO>?@A;<=BCDEFGHIJKLMNO89:.89:;<=>?@ABCDEFGHIJKLMNOtuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽNoneZAThe laws for MonadPlus are less prominently declared in the base  libraries. 0PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst‘’“”•–—˜™-'(PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst%ihefgjkdcb^_`almn][\oZYXWVPQRSTUpqrst%PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst‘’“”•–—˜™Noneuvwxyz{|}~€š›œžŸ ¡¢£¤¥¦§¨ uvwxyz{|}~€ uvwxyz{|}~€uvwxyz{|}~€š›œžŸ ¡¢£¤¥¦§¨ None‚ƒ„…†‡ˆ‰Š‹Œ©ª«¬ ‚ƒ„…†‡ˆ‰Š‹Œ …†‡ˆ‰Š‹Œ„ƒ‚ ‚ƒ„…†‡ˆ‰Š‹Œ©ª«¬ None Ž‘’­®¯°±²³´Ž‘’Ž‘’ Ž‘’­®¯°±²³´ None “”•–—˜™š›œµ¶· “”•–—˜™š›œ ™˜—“”•–š›œ “”•–—˜™š›œµ¶· None¸%Cheating: just showing a few values ( map f [0..10]). žŸ ¡¢¹º»¼½¾¿ÀÁ¸ÂžŸ ¡¢žŸ ¡¢žŸ ¡¢¹º»¼½¾¿ÀÁ¸Âà !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFGHIJJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ Œ  Ž   ‘ ’ “ ” • – — ˜ ™ š › œ Š  ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © Š ª «¬­®¯°±²³´µ¶·¸¹º»¼½¾¬¿À¬¿Á¬¿Â¬¿Ã¬¿Ä¬¿Å¬¿Æ¬¿Ç¬¿È¬¿É¬¿Ê¬¿Ë¬¿Ì¬¿Í¬¿Î¬¿Ï¬¿Ð¬¿Ѭ¿Ѭ¿Ò¬¿Ó¬¿Ô¬ÕÖ¬Õ׬ը¬ÕÙ¬ÕÙ¬ÕÚ¬ÕÛ¬ÕܬÕݬÕÞ¬Õ߬Õà¬Õá¬Õâ¬Õã¬Õä¬Õå¬Õæ¬Õç¬èé¬èê¬èë¬ìí¬ìî¬ìï¬ìð¬ìñ¬­ò¬­ó¬­ô¬õö¬õ÷¬õø¬õù¬õú¬õû¬õü¬ýþ¬ýÿ¬ý¬ý¬ý°              !"#$%&&'()*+,-./012 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H IJKJKJLJLJMJNJOJPJQJQJRJRJSJSJTJTJUJUJVJVJWJXJY Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r stutvtwxyz{|}~€°‚ƒ„…†²‡ˆ‰Š‹ŒŽ·‘’¸“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á  à Ä Å Æ Ç È ° ÉÊClassLaws-0.3.0.2Test.ClassLaws.PartialTest.ClassLaws.TestingFinFunsTest.ClassLaws.CoreTest.ClassLaws.TestingEqualityTest.ClassLaws.TestingDatatypesTest.ClassLaws.TestingStateControl.Monad.LawsControl.Monad.Laws.InstancesControl.Monad.State.Class.Laws(Control.Monad.State.Class.Laws.InstancesData.Monoid.LawsData.Monoid.Laws.InstancesTest.ClassLawsArbitraryPartialarbitraryPartial shrinkPartialTestablePartialpropertyPartialPartial unPartial showPartial genPartialSemEqFunTabshowPartialFunshowFun enumElemsarbitraryPartialFun table2funlMeet semanticLEsemEqFun lessEqPartial eqPartial meetPartialLawTestlawtestLawParamLawBodyLawArgsTheoremEqual=.=addSteps blindlawtestpartiallawtest quickLawCheckquickFLawCheckquickLawCheckPartialPos TestEqual testEqual testRunEqtestEqtestRunEqPartial testEqPartial pairwiseEq failingPair failingPair'MyListNilCons foldrMyList list2MyList myList2List+++snocSSunSSStateSrunSPairfstPsndPgetStateputState returnState bindStateL fmapStateL bindStateS fmapStateS pairFromGenpairShowPartial basicPairShow pairRecPatt statePatt enumTotArbenumShowBot_auxLst MonadPlusLaws monadPlusLaw1 monadPlusLaw2 monadPlusLaw3 monadPlusLaw4 monadPlusLaw5 MonadPlusLaw5 MonadPlusLaw4 MonadPlusLaw3 MonadPlusLaw2 MonadPlusLaw1FunctorMonadLawsfunctorMonadLawFunctorMonadLaw MonadLaws monadLaw1 monadLaw2 monadLaw3 MonadLaw3 MonadLaw2 MonadLaw1 FunctorLaws functorLaw1 functorLaw2 FunctorLaw2 FunctorLaw1defaultFunctorLaw1defaultFunctorLaw2defaultMonadLaw1defaultMonadLaw2defaultMonadLaw3defaultFunctorMonadLawdefaultMonadPlusLaw1defaultMonadPlusLaw2defaultMonadPlusLaw3defaultMonadPlusLaw4defaultMonadPlusLaw5testFunctorListtestFunctorMaybetestFunctorMyList testMonadListtestMonadMaybetestFunctorMonadMyListtestMonadStatetestMonadMyListtestFunctorMonadListtestFunctorMonadMaybemainexpectedFailuresMonadStateGetGetMonadStateGetPutMonadStatePutGetMonadStatePutPutMonadStateLawsmonadStatePutPutmonadStatePutGetmonadStateGetPutmonadStateGetGetdefaultMonadStatePutPutdefaultMonadStatePutGetdefaultMonadStateGetPutdefaultMonadStateGetGettestLawsStateLtestLawsStatePartialLtestLawsStateStestLawsStatePartialS MonoidLaws monoidLaw1 monoidLaw2 monoidLaw3 MonoidLaw3 MonoidLaw2 MonoidLaw1defaultMonoidLaw1defaultMonoidLaw2defaultMonoidLaw3testMonoidEndotestMonoidEndoPartialtestMonoidMyListb2itest_roundtripChasingBottoms-1.3.0.5Test.ChasingBottoms.IsBottombottom$fArbitraryPartial(,,) $fShowPartial$fArbitraryPartial(,)$fShowPartial0$fArbitraryPartial()$fArbitraryPartialBool$fArbitraryPartialChar$fArbitraryPartialInt$fShowPartial1$fShowPartial2$fShowPartial3$fShowPartial4$fTestablePartial(->)$fTestablePartialGen$fTestablePartialBool$fTestablePartial'Test.ChasingBottoms.ContinuousFunctionsinfiniteListOf finiteListOfflatresize'sized' frequency'oneof' elements'choose' arbitrary' transformlift'match functionTofunctionmoreapply PatternMatchGenTransformerMakePM MakeResultTest.ChasingBottoms.SemanticOrdnoTweak timeOutLimit approxDepthTweak semanticEq/=!==! SemanticEq semanticMeet semanticJoin/\!\/!semanticCompare<=!>=!>!)$fSemanticEq(->)$fEq(->)$fArbitraryPartial(->) $fShow(->)QuickCheck-2.4.2Test.QuickCheck.PropertyPropertyTest.QuickCheck.Arbitrary ArbitraryTest.QuickCheck.Genresizesized frequencyoneofelementschoose arbitrary coarbitraryGenTest.QuickCheck.TestverboseCheckWithResultverboseCheckResultverboseCheckWith verboseCheckquickCheckWithResultquickCheckResultquickCheckWith quickCheckstdArgschattymaxSize maxDiscard maxSuccessreplayArgsoutputlabelsnumTestsSuccessGaveUpreasonusedSizeusedSeed numShrinksFailureNoExpectedFailureResultdisjoin.||.conjoin.&&..&. forAllShrinkforAllwithin==>coverclassifycollectlabel expectFailureverbose whenFail'whenFail printTestCase shrinkingmapSizepropertyTestablePropTest.QuickCheck.ModifiersBlindFixedOrdered OrderedListNonEmpty NonEmptyListPositiveNonZero NonNegativeShrink2Smart Shrinking shrinkState shrinkInit ShrinkState orderedListvectorcoarbitraryShowcoarbitraryRealcoarbitraryIntegral><shrinkRealFracshrinkIntegral shrinkNothingarbitrarySizedBoundedIntegralarbitraryBoundedRandomarbitraryBoundedIntegralarbitrarySizedFractionalarbitrarySizedIntegralshrink CoArbitraryvectorOflistOf1listOfgrowingElements suchThatMaybesuchThatsamplesample'promotevariantTest.QuickCheck.TextrangesMkStrStr$fTestEqualMyList$fArbitraryMyList$fArbitraryStateT$fTestEqualStateT$fTestEqualMaybe $fTestEqual[]$fArbitraryEndo$fTestEqualEndo $fFunctorSS $fMonadSS $fTestEqualSS$fTestEqualState$fMonadStatesState$fFunctorState $fMonadState$fArbitraryPartialOrdering$fCoArbitraryOrdering$fArbitraryOrdering$fSemanticOrdState$fSemanticEqState $fEqState$fSemanticOrdPair$fSemanticEqPair$fEqPair$fArbitraryPartialState $fShowState$fArbitraryState$fArbitraryPartialPair $fShowPair$fCoArbitraryPair$fArbitraryPair$fLawTestMonadPlusLaw5$fLawTestMonadPlusLaw4$fLawTestMonadPlusLaw3$fLawTestMonadPlusLaw2$fLawTestMonadPlusLaw1$fLawTestFunctorMonadLaw$fLawTestMonadLaw3$fLawTestMonadLaw2$fLawTestMonadLaw1$fLawTestFunctorLaw2$fLawTestFunctorLaw1$fFunctorMonadLawsIO$fFunctorMonadLawsMaybe$fFunctorMonadLaws[]$fMonadLawsMyList $fMonadMyList$fMonadLawsStateT $fMonadLawsIO$fFunctorMonadLawsMyList$fMonadLawsMaybe $fMonadLaws[]$fFunctorLawsMyList$fFunctorMyList$fFunctorLawsIO$fFunctorLawsMaybe$fFunctorLaws[]$fLawTestMonadStateGetGet$fLawTestMonadStateGetPut$fLawTestMonadStatePutGet$fLawTestMonadStatePutPut$fFunctorMonadLawsSS$fFunctorLawsSS $fMonadLawsSS$fMonadStateLawssSS$fFunctorMonadLawsState$fFunctorLawsState$fMonadLawsState$fMonadStateLawssState$fLawTestMonoidLaw3$fLawTestMonoidLaw2$fLawTestMonoidLaw1 $fShowEndo0 $fShowEndo $fEnumEndo $fBoundedEndo$fMonoidLawsMyList$fMonoidMyList$fSemanticEqEndo$fEqEndo$fArbitraryPartialEndo$fMonoidLawsEndo