ZC      !"#$%&'()*+,-./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      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno  !"#$%&'()*+,-./None0<We use the MyList datatype to provide instances that do not  satisfy some class laws. 01234567pqrstuvwx012345670213456702134567pqrstuvwxNone389:;<=>?@ABCDEFGHIJKLMNOyz{|}~89:;<=>?@ABCDEFGHIJKLMNO>?@A;<=BCDEFGHIJKLMNO89:.89:;<=>?@ABCDEFGHIJKLMNOyz{|}~NoneZAThe laws for MonadPlus are less prominently declared in the base  libraries. 0PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst-'(PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst%ihefgjkdcb^_`almn][\oZYXWVPQRSTUpqrst%PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstNoneuvwxyz{|}~ uvwxyz{|}~ uvwxyz{|}~uvwxyz{|}~ None  None   None   None%Cheating: just showing a few values ( map f [0..10]).  None !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFFGHIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                 ! " # $ % & ' ( ) * + + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N OP OP OQ OQ OR OS OT OU OV OV OW OW OX OX OY OY OZ OZ O[ O[ O\ O] O^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x yz y{ y|}~                          ClassLaws-0.3.1.0Test.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.InstancesText.Show.LawsTest.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_roundtripShowLawsshowLawShowLawdefaultShowLawChasingBottoms-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$fTestEqualChar $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$fLawTestShowLaw