i%      !"#$None&'7KK %&'()*+,-.%&')()(Safe"#/0123456789:;<=>?@AB/0321465798:;>=<None+,-01;<=>?CEFKOQTVOQCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_`abcdefghijklmnopqrstuvwxyz{|}~ CDEFGHIJKLMNOPQRST    [^]\x NoneQVNoneNone%+368;<=>?AFSTdD      !"#$%&'()*+,-./0123456789:;<=> !"$%&(')*,+-/.None 36;<=>?FST C?@ABCDEFGHIJKLMNO?@ABCDEFGIHE5G4M4 None &'7;=>?A yPQPQQ None "#;<=>?K RSTUVWXYZ[\]^_`abRSVUTWXYZ]\[ None &'7;=>?AK cdefghijklcdefghjiji None"#&';<=>?Kd#mnopqrstuvwxyz{mnpoqr None ;<=>?KST|}~|}~None "#;<=>?KV None "#&';<=>?KdmnpoNone "#;<=>?KFNone"#<ONone "#;<=>?NO;Instantiate a schema by making all the variables different.None"#&';<=>?KQV %None "#3;<=>?KOST None<tNone"#&'-7;<=>?AFQSTV0\Declare what variable names you would like to use for values of a particular type. See also  baseTypeNames. cA typeclass for types which support observational equality, typically used for types that have no  instance. An instance Observe test outcome a declares that values of type a can be tested8 for equality by random testing. You supply a function observe :: test -> outcome -> a. Then, two values x and y: are considered equal, if for many random values of type test,  observe test x == observe test y.4For an example of using observational equality, see  Lhttps://github.com/nick8325/quickspec/tree/master/examples/PrettyPrinting.hsPrettyPrinting.hs. You must use  to add the Observe( instance to your signature. Note that  requires an P instance, so this even applies for monomorphic types. Don't forget to add the  instance too in that case.FMake an observation on a value. Should satisfy the following law: if x /= y, then there exists a value of test such that  observe test x /= observe test y.VDeclare that values of a particular type should be compared by observational equality.See examples/PrettyPrinting.hs for an example.XXX mention what instances must be in scope XXX remove constraints etc observe :: Ord res => Gen env -> (env -> val -> res) -> Observe val res observe gen f = Observe (do { env  -gen; return (x - f env x) })QDeclare a predicate with a given name and value. The predicate should have type  ... -> Bool.>      ! "#$%&'()*+,-./012345       ! None<>?ASTVhX<A class of things that can be used as a QuickSpec signature.!Convert the thing to a signature. A signature.=Run QuickSpec. See the documentation at the top of this file.xDeclare a constant with a given name and value. If the constant you want to use is polymorphic, you can use the types  ,  ,  ,  , ! to monomorphise it, for example: *constant "reverse" (reverse :: [A] -> [A])GQuickSpec will then understand that the constant is really polymorphic.cDeclare a predicate with a given name and value. The predicate should be a function which returns 6p. It will appear in equations just like any other constant, but will also be allowed to appear as a condition. For example:  sig = [  "delete" ( :: Int -> [Int] -> [Int]),  "insert" (T :: Int -> [Int] -> [Int]), predicate "member" (member :: Int -> [Int] -> Bool) ] 9Declare a new monomorphic type. The type must implement  and .WDeclare a new monomorphic type, saying how you want variables of that type to be named.7Customize how variables of a particular type are named.9Declare a typeclass instance. QuickSpec needs to have an  and , instance for each type you want it to test. For example, if you are testing  k vI, you will need to add the following two declarations to your signature:  (  :: (Ord A, Ord B)  Ord (Map A B))  (  :: (Arbitrary A, Arbitrary B)  Arbitrary (Map A B)) Declare some functions as being background functions. These are functions which are not interesting on their own, but which may appear in interesting laws with non-background functions. Declaring background functions may improve the laws you get out. Here is an example, which tests ++ and length , giving 0 and + as background functions: main = quickSpec [ con "++" ((++) :: [A] -> [A] -> [A]), con "length" (length :: [A] -> Int), background [ con "0" (0 :: Int), con "+" ((+) :: Int -> Int -> Int) ] ]Run QuickCheck on a series of signatures. Tests the functions in the first signature, then adds the functions in the second signature, then adds the functions in the third signature, and so on.This can be useful when you have a core API you want to test first, and a larger API you want to test later. The laws for the core API will be printed separately from the laws for the larger API.%Here is an example which first tests 0 and + and then adds ++ and length: main = quickSpec [sig1, sig2] where sig1 = [ con "0" (0 :: Int), con "+" ((+) :: Int -> Int -> Int) ] sig2 = [ con "++" ((++) :: [A] -> [A] -> [A]), con "length" (length :: [A] -> Int) ]6Set the maximum size of terms to explore (default: 7).?Set how many times to test each discovered law (default: 1000)._Set the maximum value for QuickCheck's size parameter when generating test data (default: 20)./Set which type polymorphic terms are tested at.SSet how hard QuickSpec tries to filter out redundant equations (default: no limit).YIf you experience long pauses when running QuickSpec, try setting this number to 2 or 3. Set the maximum term size QuickSpec will reason about when it filters out redundant equations (default: same as maximum term size).qIf you get laws you believe are redundant, try increasing this number to 1 or 2 more than the maximum term size.!aSet the random number seed used for test case generation. Useful if you want repeatable results."  !#   !78 !"#$%$%&'(&'(&')&'*+,-./0123456789:;<=>?@ABCDEFFGHIJKLMNOOPQRSTUVWXYYZ[\]^_``abcdefghijjklmnopqrstuvvwxyz{|}~?ef+,-./       !"#$%&'()*+,-../01233456789:;<=>?:@ABC9DEFGHIJKLMNOPQRSTUVWXYZ[\]^ _ ` a a b c d e e f f g h i j k l m n o o p p q r s t u v a a w x y y z { m | } ~     : y y m yymyymhSWS57aaX6     54"quickspec-2-6XWhW16FKHaLuRGqwXt6aW QuickSpecQuickSpec.TerminalQuickSpec.Testing.DecisionTreeQuickSpec.TypeQuickSpec.Haskell.ResolveQuickSpec.UtilsQuickSpec.TermQuickSpec.PropQuickSpec.TestingQuickSpec.Testing.QuickCheckQuickSpec.PruningQuickSpec.Pruning.UntypedTweeQuickSpec.Pruning.BackgroundQuickSpec.Pruning.TypesQuickSpec.Pruning.Twee$QuickSpec.Explore.PartialApplicationQuickSpec.Explore.TermsQuickSpec.Explore.SchemasQuickSpec.Explore.PolymorphicQuickSpec.Explore.ConditionalsQuickSpec.ExploreQuickSpec.HaskellinstmonoType Data.ListdeleteinsertData.MapMapbaseData.Typeable.InternalTypeable(QuickCheck-2.10.1-BUFYQzp5Pjm7JbQeTzW89lTest.QuickCheck.Arbitrary Arbitrary Data.ProxyProxy'constraints-0.10-G4Htbojc3YcLTXmbriPNoDData.ConstraintDictSub:-EDCBAObserveobserve SignaturetoSigSig quickSpeccon predicatemonoTypeWithVarsvars backgroundserieswithMaxTermSize withMaxTestswithMaxTestSize defaultTowithPruningDepthwithPruningTermSize withFixedSeed $fMonoidSig $fSignature[]$fSignatureSigTerminal MonadTerminalputTempputLine putStatus clearStatus withStatuswithNullTerminalwithStdioTerminal Statisticsstat_num_test_casesstat_num_testsstat_num_termsResultEqualToDistinct InnerTree SingletonTestCase DecisionTreedt_tree dt_test_cases dt_evaluateempty addTestCase statisticsWrapperwrapreunwrap UnwrappedInValuePolyunPolyApplytryApplyTypeView unTypeViewTypedtyp otherTypesDL typeSubst_SymAClassEClassDClassCClassBClassATyConStringArrowTypetypeVar isTypeVartypeOftypeRep applyType arrowType unpackArrowtypeArgstypeRestypeDrop typeArity oneTypeVarskolemiseTypeVars fromTypeRep fromTyContyCon getDictionary isDictionary pPrintType typeSubsttypesDLtyVarscastapplycanApplypolycanonicaliseTypepolyTyppolyMap polyRename polyApplypolyPairpolyListpolyMgu toPolyValuetoValue fromValueunwrapmapValueforValueofValue withValue pairValues wrapFunctor unwrapFunctor valueTypevalue Instances findValue findInstance is_instancesis_findMingetMinMaxgetMax#key keyDefaultreadingfstLenssndLens makeLensAsrepeatM partitionBycollateisSorted isSortedByusortusortBysortBy'usortBy'orElse unbuffered getMaxWith getMinWith minimumBylabelMpretty-1.1.3.3Text.PrettyPrint.HughesPJClass prettyParen prettyShow prettyNormal PrettyLevelPretty pPrintPrecpPrint pPrintListText.PrettyPrint.HughesPJ fullRender renderStylerenderfirstfsepfcatcatsep<+><>$+$$$ punctuatehangnestvcathsephcat reduceDocmaybeDoubleQuotes maybeQuotes maybeBraces maybeBrackets maybeParensbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecoloncommasemiisEmpty zeroWidthText sizedTextptexttextcharDoc#Text.PrettyPrint.Annotated.HughesPJstyle TextDetailsStrChrPStrStylemode lineLengthribbonsPerLineModePageMode ZigZagModeLeftMode OneLineMode%twee-lib-2.1.2-EShYUJifMww2jEbCQnNrVa Twee.BaseArityaritySizedsize EqualsBonus Twee.Pretty tupleStyle infixStylepostfixprefiximplicitArguments fixedArity uncurriedcurried invisiblesupply pPrintSet pPrintTuple pPrintEmpty prettyPrint PrettyTerm termStyle TermStyle pPrintTerm:+:InlInr MeasureFunsMeasureEvalevalSymbolicsubsttermsDLVarVvar_idvar_tyTermAppisAppisVartermsfunsfreeVaroccoccVarmapVarsubtermsproperSubterms canonicalise evaluateTermmeasure compareFunsNamedNameFun PrettyArity prettyArityEquation:=:Prop:=>:rhslhsliteralsunitPropmapFun=== prettyPropnameVars MonadTestertestConfigcfg_fixed_seedcfg_max_test_size cfg_num_testsTester Environmentenv_eval env_tests env_configlens_num_testslens_max_test_sizelens_fixed_seedrunquickCheckTest WatchPrunerReadOnlyPrunerwithReadOnlyPruner MonadPruneradd normaliser normalise watchPrunercfg_max_cp_depthcfg_max_term_sizePrunerlens_max_term_sizelens_max_cp_depth normaliseTweenormalFormsTweeaddTweetoTwee skolemisefromTwee Background addFunction UntypedTerm TypedTermTaggedTagFunc typingAxiomstagencodedecodePartiallyAppliedPartialgetTotaltotal simpleApplyTermstm_treetm_termstm_emptyKnew Discoveredtree treeForType initialStateexploreexplore' mostGeneralSchemas sc_instancessc_instantiated sc_classessc_emptysc_instantiate_singletonRejectedAccepted result_propsclasses instantiated instances instance_ exploreIninstantiateRep instantiate generality mostSpecificallUnificationsUniverse univ_inner univ_rootPolyFun fun_originalfun_specialised Polymorphic pm_schemas pm_unifiable pm_accepted pm_universePolyMunPolyMschemas unifiableacceptedunivpolyFunpolyTerm exploreNoMGU addPolyType regeneralise typeInstances intersectionuniverse inUniverseusefulForUniverseWithConstructorNormal ConstructorClassification PredicateSelectorFunction clas_pred clas_index clas_trueclas_selectorsclas_test_caseclassify ConditionalsconditionalsUniverserunConditionalspredTypeconsiderPredicateconsiderConditionalisingconditionallyRedundantconditionallyRedundant' addPredicateconditionalise moreTermsNamesghc-prim GHC.ClassesOrdbaseTypecfg_default_tocfg_predicates cfg_constants cfg_instances cfg_max_sizecfg_tweecfg_quickCheckPredReppredConspredCon predInstancesTestCaseWrappedunTestCaseWrappedFoldr PredicateableuncrryConstant con_classifycon_size con_valuecon_pretty_arity con_stylecon_nameOrdygetNamesObserve1Observe2 baseInstancesnames arbitraryVal evalHaskell constant'isOp genSuchThattruetrueTermlens_quickCheck lens_twee lens_max_sizelens_instanceslens_constantslens_predicateslens_default_to defaultConfigprintConstants GHC.TypesBool