śĪTšLS>      !"#$%&'()*+,-./0123456789:;<=None is a >, 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 ?,  @ and >& 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. ABCABABC"Roman Cheplyaka <roma@ro-che.info>None NonNegative x: guarantees that x >= 0.  Positive x: guarantees that x > 0. DD is a wrapper for E, 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. Sum (union) of series Product of series Fair version of F and G 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 H. ICIf 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. XDJKLMN OPQRSIT UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€!  !   ODJKLMN   OPQRSIT UVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€ Safe-Inferred‚ƒ!"#$%&'()*+„…†‡ˆ,‰Š !"#$%&'()*+, ‚ƒ!%$#"&*)('+„…†‡ˆ,‰Š"Roman Cheplyaka <roma@ro-che.info>None -AClass 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. 2&The type of properties over the monad m 33 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. 3- does not affect the quantification context. 4Execute a monadic test 5)Set the universal quantification context 6+Set the existential quantification context 7+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,  7 $ \ x y -> p x y is equivalent to  7 $ \(x,y) -> p x y and not to  7 $ \x -> 7 $ \ 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. 8The 89 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 87 resets the quantification context for its operands to  the default (universal). 9ERun 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. )-./01‹ŒŽ‘’“”•–—2˜™š›œ34žŸ ”56789:¢£¤„!"#$%&'()*+-./012›3456789:-./10‹ŽŒ‘’“”•–—2˜™š›œ34žŸ ”56789:¢£¤„"Roman Cheplyaka <roma@ro-che.info>None;*A simple driver that runs the test in the ¦ monad and prints the  results. < 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 =Like <1, 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. ;§Ø<=!"#$%&'()*+,./01;<=;<=.,!%$#"&*)('+/10;§Ø<="Roman Cheplyaka <roma@ro-che.info>None -23456789:; 5673489:;-2©       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHFIJ KLMFNOFIPFQRFISTMUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™™š›œœžŸ9 ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²smallcheck-1.0.1Test.SmallCheck.SeriesTest.SmallCheck.DriversTest.SmallCheckTest.SmallCheck.SeriesMonadTest.SmallCheck.Property.ResultTest.SmallCheck.Property logict-0.6Control.Monad.Logic.Class>>-SeriesDepth NonNegativegetNonNegativePositive getPositiveCoSerialcoseriesSerialseriesgeneratelist\/><<~>getDepth localDepthdecDepthcons0cons1 newtypeConscons2cons3cons4alts0alts1alts2alts3alts4 newtypeAltsPropertyFailure PropertyFalseCounterExample AtLeastTwoNotExistPropertySuccess Vacuously PropertyTrue ExistUniqueExistArgument ppFailureTestabletest TestQualityBadTestGoodTestPropertyovermonadicforAllexists existsUnique==> changeDepth changeDepth1 smallCheck smallCheckMsmallCheckWithHook MonadLogicbaseGHC.BaseMonad Control.Monad MonadPlus runSeries$fMonadTransSeriesNGHC.RealIntegralapControl.Applicative<*>mzerodecDepthChecked GCoSerial gCoseriesGSerialgSeriessuchThatuncurry3uncurry4 checkDepthconstMunwind$fShowNonNegative$fSerialmNonNegative$fShowPositive$fSerialmPositive $fShow(->)$fCoSerialm(->) $fSerialm(->) $fCoSerialm[] $fSerialm[]$fCoSerialmEither$fSerialmEither$fCoSerialmMaybe$fSerialmMaybe$fCoSerialmBool $fSerialmBool$fCoSerialm(,,,)$fSerialm(,,,)$fCoSerialm(,,) $fSerialm(,,)$fCoSerialm(,) $fSerialm(,)$fCoSerialmChar $fSerialmChar$fCoSerialmDouble$fSerialmDouble$fCoSerialmFloat$fSerialmFloat $fCoSerialmN $fSerialmN$fCoSerialmInteger$fSerialmInteger$fCoSerialmInt $fSerialmInt $fCoSerialm() $fSerialm()$fGCoSerialm:+: $fGSerialm:+:$fGCoSerialm:*: $fGSerialm:*:$fGCoSerialmU1 $fGSerialmU1$fGCoSerialmK1 $fGSerialmK1$fGCoSerialmM1 $fGSerialmM1Prettyprettyind prettyArgs existsMsgplural$fPrettyPropertySuccess$fPrettyPropertyFailureQuantification ExistsUniqueExistsForallEnvquantificationtestHookPropertySeriessearchExamplessearchCounterExamples searchClosest unPropertyunProp runPropertyatomicProperty makeAtomic testFunctionatMostquantify freshContext$fTestablenProperty$fTestablem(->)$fTestablemBool$fTypeablePropertyghc-prim GHC.TypesIOrunTestWithStats modifyIORef'