\S@C      !"#$%&'()*+,-./0123456789:;<=>?@AB Trustworthy is a C, action that enumerates values of a certain  type, up to some depth. "The depth bound is tracked in the SC" monad and can be extracted using  getDepth and changed using  localDepth. 9To manipulate series at the lowest level you can use its D,  E and C& instances. This module provides some : higher-level combinators which simplify creating series.  A proper 6 should be monotonic with respect to the depth  i.e.  localDepth (+1) s! should emit all the values that s emits (and  possibly some more). IIt is also desirable that values of smaller depth come before the values  of greater depth. (Maximum depth of generated test values. EFor data values, it is the depth of nested constructor applications. DFor functional values, it is both the depth of nested case analysis  and the depth of results. FGHIFGFGHI"Roman Cheplyaka <roma@ro-che.info> Trustworthy NonEmpty xs: guarantees that xs is not null  NonNegative x: guarantees that x >= 0.  Positive x: guarantees that x > 0. JJ is a wrapper for K, types that causes only non-negative values . to be generated. Generated functions of type N a -> b do not distinguish  different negative values of a.  A proper  3 implementation should pass the depth unchanged to F its first argument. Doing otherwise will make enumeration of curried + functions non-uniform in their arguments. BA simple series specified by a function from depth to the list of  values up to that depth. )Return the list of values generated by a  . Useful for  debugging  instances. Monadic version of  Sum (union) of series Product of series Fair version of L and M Query the current depth #Run a series with a modified depth Run a  with the depth decreased by 1. :If the current depth is less or equal to 0, the result is N. OEFix the depth of a series at the current level. The resulting series  will no longer depend on the "ambient" depth. PCIf the current depth is 0, evaluate the first argument. Otherwise, 6 evaluate the second argument with decremented depth. Same as , but preserves the depth. $Same as  , but preserves the depth. b JQRSTU VWXYZOP[ !"#$\]^_`abcdefghijklmnopqrstuvwxyz{|}~%  !"#$% !"#$ W  JQRSTU  VWXYZOP[ !"#$\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe/$An explanation for the test outcome %&'()*+,-./01 %&'()*+,-./01 %)('&*.-,+/01"Roman Cheplyaka <roma@ro-che.info> Trustworthy 2AClass of tests that can be run in a monad. For pure tests, it is 0 recommended to keep their types polymorphic in m rather than  specialising it to Identity. 7&The type of properties over the monad m 88 s $ \x -> p x makes x range over the  s (by ' default, all variables range over the  for their types). FNote that, unlike the quantification operators, this affects only the ? variable following the operator and not subsequent variables. 8- does not affect the quantification context. 9Execute a monadic test :)Set the universal quantification context ;+Set the existential quantification context <+Set the uniqueness quantification context. IBear in mind that "! (x, y): p x y is not the same as "! x: "! y: p x y. For example, "! x: "! y: |x| = |y| is true (it holds only when x=0), but "! (x,y): |x| = |y| is false (there are many such pairs).  As is customary in mathematics,  < $ \ x y -> p x y is equivalent to  < $ \(x,y) -> p x y and not to  < $ \x -> < $ \ y -> p x y B (the latter, of course, may be explicitly written when desired). GThat is, all the variables affected by the same uniqueness context are ' quantified simultaneously as a tuple. =The =9 operator can be used to express a restricting condition J under which a property should hold. It corresponds to implication in the  classical logic.  Note that =7 resets the quantification context for its operands to  the default (universal). >ERun property with a modified depth. Affects all quantified variables  in the property. ?Quantify the function's argument over its , but adjust the  depth. This doesn'#t affect any subsequent variables. Works like the 6 instance, but includes an explanation of the result.  and ( correspond to test failure and success  respectively. *23456789:;<=>?%&'()*+,-./023456789:;<=>?23465789:;<=>?"Roman Cheplyaka <roma@ro-che.info>Safe@*A simple driver that runs the test in the  monad and prints the  results. A Use this if: 2 You need to run a test in a monad different from  = You need to analyse the results rather than just print them BLike A1, but allows to specify a monadic hook that gets " executed after each test is run. HUseful for applications that want to report progress information to the  user. @AB%&'()*+,-./013456@AB@AB31%)('&*.-,+0/465@AB"Roman Cheplyaka <roma@ro-che.info>Safe /2789:;<=>?@ :;<89=>?@27/       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLJMN OPQRJSTJMUJVWJMXYZR[\]^_`abcdefghijklmnopqrstuvwxyz{|}~JJ=smallcheck-1.1Test.SmallCheck.SeriesTest.SmallCheck.DriversTest.SmallCheckTest.SmallCheck.SeriesMonadTest.SmallCheck.Property.ResultTest.SmallCheck.Propertylogict-0.6.0.1Control.Monad.Logic.Class>>-SeriesDepthNonEmpty getNonEmpty NonNegativegetNonNegativePositive getPositiveCoSerialcoseriesSerialseriesgeneratelistlistM\/><<~>getDepth localDepthdecDepthcons0cons1 newtypeConscons2cons3cons4alts0alts1alts2alts3alts4 newtypeAltsPropertyFailure PropertyFalseCounterExample AtLeastTwoNotExistPropertySuccess Vacuously PropertyTrue ExistUniqueExistReasonArgument ppFailureTestabletest TestQualityBadTestGoodTestPropertyovermonadicforAllexists existsUnique==> changeDepth changeDepth1 smallCheck smallCheckMsmallCheckWithHook MonadLogicbaseGHC.BaseMonad Control.Monad MonadPlus runSeries$fMonadTransSeries$fMonadLogicSeriesNGHC.RealIntegralapControl.Applicative<*>mzerofixDepthdecDepthChecked GCoSerial gCoseriesGSerialgSeriessuchThatuncurry3uncurry4 checkDepthconstMunwind$fShowNonEmpty$fSerialmNonEmpty$fShowNonNegative$fSerialmNonNegative$fShowPositive$fSerialmPositive $fShow(->)$fCoSerialm(->) $fSerialm(->) $fCoSerialm[] $fSerialm[]$fCoSerialmEither$fSerialmEither$fCoSerialmMaybe$fSerialmMaybe$fCoSerialmBool $fSerialmBool$fCoSerialm(,,,)$fSerialm(,,,)$fCoSerialm(,,) $fSerialm(,,)$fCoSerialm(,) $fSerialm(,)$fCoSerialmChar $fSerialmChar$fCoSerialmRatio$fSerialmRatio$fCoSerialmDouble$fSerialmDouble$fCoSerialmFloat$fSerialmFloat $fCoSerialmN $fSerialmN$fCoSerialmInteger$fSerialmInteger$fCoSerialmInt $fSerialmInt $fCoSerialm() $fSerialm() $fGSerialmM1$fGCoSerialm:+: $fGSerialm:+:$fGCoSerialm:*: $fGSerialm:*:$fGCoSerialmU1 $fGSerialmU1$fGCoSerialmK1 $fGSerialmK1$fGCoSerialmM1 $fGSerialmM10Prettyprettyind prettyArgs existsMsgplural$fPrettyPropertySuccess$fPrettyPropertyFailure$fTestablemEitherghc-prim GHC.TypesBool Data.EitherLeftRightQuantification ExistsUniqueExistsForallEnvquantificationtestHookPropertySeriessearchExamplessearchCounterExamples searchClosest unPropertyunProp runPropertyatomicProperty makeAtomic testFunctionatMostquantify freshContext$fTestablenProperty$fTestablem(->)$fTestablemBool$fTypeablePropertyIOrunTestWithStats modifyIORef'