!       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None&'8M Safe"# '     None&',-.12=>?@AEGHMQSVX]RH quickspecFunctions for re-wrapping an  value. quickspec@Wrap up a value which has the same existential type as this one. quickspec?Unwrap a value which has the same existential type as this one. quickspecpThe unwrapped value. Consists of the value itself (with an existential type) and functions to wrap it up again. quickspec-Dynamic values inside an applicative functor.For example, a value of type  Value Maybe represents a Maybe something. quickspecZRepresents a forall-quantifier over all the type variables in a type. Wrapping a term in PolyC normalises the type by alpha-renaming type variables canonically.The  instance for = does unification to handle applying a polymorphic function. quickspec/Typed things that support function application.  quickspec!Apply a function to its argument.For most instances of $, the type of the argument must be exactly equal to the function's argument type. If you want unification to happen, use the $ instance of .! quickspecA wrapper for using the  machinery on types.$ quickspec$A class for things that have a type.% quickspec The type.& quickspec#Types that appear elsewhere in the $Q, for example, types of subterms. Should return everything which is affected by Q.' quickspec"Substitute for all type variables.( quickspec"A polymorphic type of kind Symbol.4 quickspecA type constructor.5 quickspecThe function type constructor (->).6 quickspec%An ordinary Haskell type constructor.7 quickspec\A string. Can be used to represent miscellaneous types that do not really exist in Haskell.8 quickspecA (possibly polymorphic) type. quickspec3All type variables that are defined in this module.9 quickspecA type variable.: quickspec#Check if a type is a type variable.; quickspecConstruct a type from a .< quickspecConstruct a type from a .= quickspecTurn a 4 into a type.> quickspec+Function application for type constructors. For example, happlyType (typeRep (Proxy :: Proxy [])) (typeRep (Proxy :: Proxy Int)) == typeRep (Proxy :: Proxy [Int]).? quickspecConstruct a function type.@ quickspec Is a given type a function type?A quickspec2Decompose a function type into (argument, result).6For multiple-argument functions, unpacks one argument.B quickspec!The arguments of a function type.C quickspecThe result of a function type.D quickspecMGiven the type of a function, returns the type of applying that function to n? arguments. Crashes if the type does not have enough arguments.E quickspec(How many arguments does a function take?F quickspec#Unify all type variables in a type.G quickspec2Replace all type variables with a particular type.H quickspecJMake a type ground by replacing all type variables with Skolem constants.I quickspecConstruct a type from a .J quickspec Construct a 4 type from a  Data.Typeable . quickspecSome built-in type consructors. quickspecSome built-in type consructors. quickspecSome built-in type consructors. quickspecSome built-in type consructors.K quickspecGet the outermost 4 of a .L quickspecCheck if a type is of the form  c, and if so, return c.M quickspecCheck if a type is of the form  c.N quickspec/Count how many dictionary arguments a type has.O quickspec.Split a type into constraints and normal type.P quickspec&Pretty-print a type. Differs from the  3 instance by printing type variables in lowercase.Q quickspec'Substitute for all type variables in a $.R quickspecAll types that occur in a $.S quickspec#All type variables that occur in a $.T quickspecCast a $S to a target type. Succeeds if the target type is an instance of the current type.U quickspecBCheck if the second argument is an instance of the first argument.V quickspec6Apply a function to its argument, crashing on failure.For most instances of $, the type of the argument must be exactly equal to the function's argument type. If you want unification to happen, use the $ instance of .W quickspec3Check if a function can be applied to its argument.X quickspecBuild a .Y quickspec/Alpha-rename type variables in a canonical way.Z quickspec0Get the polymorphic type of a polymorphic value.[ quickspecnRename the type variables of the second argument so that they don't overlap with those of the first argument.\ quickspecGRename the type variables of both arguments so that they don't overlap.] quickspecGRename the type variables of both arguments so that they don't overlap.^ quickspecFRename the type variables of all arguments so that they don't overlap._ quickspec+Find the most general unifier of two types.` quickspec-Convert an ordinary value to a dynamic value.a quickspec Construct a .b quickspecDeconstruct a .c quickspecDUnwrap a value to get at the thing inside, with an existential type.d quickspec"Apply a polymorphic function to a .e quickspec"Apply a polymorphic function to a .f quickspec0Apply a polymorphic function that returns a non- result to a .g quickspec0Apply a polymorphic function that returns a non- result to a .h quickspec*Apply a polymorphic function to a pair of s.X !"#$%&'()*+,-./0123467589:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkX84675KJ3210/.-,+*)(9:;<=>I?@ABCDEMLONP$%&'QRSTU!"# VWFGHY`XZ[\]^_abcdefghijkV NoneSX`n None`!"#$%&'()*+,-./01234567None%,479=>?@ACHUVgz  quickspec{A sum type. Intended to be used to build the type of function symbols. Comes with instances that are useful for QuickSpec. quickspec A helper for . quickspecA standard term ordering - size, skeleton, generality. Satisfies the property: if measure (schema t) < measure (schema u) then t < u. quickspec&A class for things that contain terms. quickspec5A different list of all terms contained in the thing. quickspec/Apply a substitution to all terms in the thing. quickspec*A variable, which has a type and a number. quickspec A typed term. quickspec5Decompose a term into a head and a list of arguments. quickspecAll terms contained in a . quickspec$All function symbols appearing in a 4, in order of appearance, with duplicates included. quickspecAll variables appearing in a 4, in order of appearance, with duplicates included. quickspec,Compute the number of a variable which does not appear in the . quickspec4Count how many times a given function symbol occurs. quickspec-Count how many times a given variable occurs. quickspecMap a function over variables. quickspec6Find all subterms of a term. Includes the term itself. quickspec>Find all subterms of a term. Does not include the term itself. quickspecRenames variables so that they appear in a canonical order. Also makes sure that variables of different types have different numbers. quickspecFEvaluate a term, given a valuation for variables and function symbols. quickspec%Compute the term ordering for a term. quickspec A helper for .89:;< =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 1   None 47=>?@AHUV}544 None &'8=?@AC~ None &'8=?@ACM  None"#=>?@AM None "#&'=>?@AMgNone =>?@AMUV_None "#=>?@AMX None "#4=>?@AM None "#&'=>?@AMgNone&'=>?@ANone"#>Q~None "#=>?@APQO quickspec;Instantiate a schema by making all the variables different.     None"#&'=>?@AMSXf  !"#$%&'()*+,-./01None "#4=>?@AMQUV23456789:;<=>?@ABCDEFGHIJNone>( KLMNOPQRSTUNone"#&',.8=>?@ACHQSUVX V quickspec>A test case is everything you need to evaluate a Haskell term.W quickspecEvaluate a variable. Returns Nothing if no  instance was found.X quickspec:Apply an observation function to get a value implementing Y . Returns Nothing if no observer was found. quickspeccA typeclass for types which support observational equality, typically used for types that have no Y 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. The function X declares a monomorphic type with an observation function. For polymorphic types, use  to declare the  instance.4For an example of using observational equality, see  Lhttps://github.com/nick8325/quickspec/tree/master/examples/PrettyPrinting.hsPrettyPrinting.hs. quickspecFMake 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.Z quickspecGenerate a random test case.[ quickspec%Generate a random variable valuation.\ quickspecGenerate a random observation.] quickspec4Generate a random function. Should be in QuickCheck.^ quickspec*Evaluate a Haskell term in an environment._ quickspecQDeclare a predicate with a given name and value. The predicate should have type  ... -> Bool. Uses an explicit generator.` quickspecQDeclare a predicate with a given name and value. The predicate should have type  ... -> Bool.Xabcdefghijklmnopqrstuvwxyz{|}~VXWZ[\]^_`None ,>@ACSUVXr# quickspec.Type class constraints as first class citizens quickspec<A class of things that can be used as a QuickSpec signature. quickspec!Convert the thing to a signature. quickspec A signature. quickspec=Run QuickSpec. See the documentation at the top of this file. quickspec;Run QuickSpec, returning the list of discovered properties. quickspec-Add some properties to the background theory. quickspecxDeclare a constant with a given name and value. If the constant you want to use is polymorphic, you can use the types 3, 2, 1, 0, /! to monomorphise it, for example: *constant "reverse" (reverse :: [A] -> [A])GQuickSpec will then understand that the constant is really polymorphic. quickspecAdd a custom constant. quickspecLift a constrained type to a $ type which QuickSpec can work with quickspec0Add an instance of a type class to the signature quickspeccDeclare a predicate with a given name and value. The predicate should be a function which returns p. 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) ]  quickspeccDeclare a predicate with a given name and value. The predicate should be a function which returns . It will appear in equations just like any other constant, but will also be allowed to appear as a condition. The third argument is a generator for values satisfying the predicate. quickspec9Declare a new monomorphic type. The type must implement Y and . quickspecYDeclare a new monomorphic type using observational equivalence. The type must implement  and . quickspecWDeclare a new monomorphic type, saying how you want variables of that type to be named. quickspec7Customize how variables of a particular type are named. quickspec9Declare a typeclass instance. QuickSpec needs to have an Y 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))  quickspec=Declare an arbitrary value to be used by instance resolution. quickspecDeclare 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) ] ] quickspecORemove a function or predicate from the signature. Useful in combination with  and friends. quickspecRun 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) ] quickspec6Set the maximum size of terms to explore (default: 7). quickspec?Set how many times to test each discovered law (default: 1000). quickspec_Set the maximum value for QuickCheck's size parameter when generating test data (default: 20). quickspec/Set which type polymorphic terms are tested at. quickspecSSet 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. quickspecSet 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. quickspecaSet the random number seed used for test case generation. Useful if you want repeatable results. quickspecUAutomatically infer types to add to the universe from available type class instances quickspec+A signature containing boolean functions: (), (), , , . quickspec/A signature containing arithmetic operations: 0, 1, (). Instantiate it with e.g. arith ( ::  ). quickspec)A signature containing list operations: [], (:), (). quickspec0A signature containing higher-order functions: () and . Useful for testing  and similar. quickspecThe QuickSpec prelude. Contains boolean, arithmetic and list functions, and function composition. For more precise control over what gets included, see , , ,  and .++None ,>@ACSUVXX./0123.3210/ !"#$% &' &'()*()*()+(),-./-.0-.1-.234534634738938:38;38<38=38=>>?@ABCDEFGHIIJKLMNOPQRSTUVWXYZ[\[]^_`abcdefghijklmnopqrstuvwxyz{|}~m       !!"#$%&'34( )*+,[-./01123456789:;<=>?@ABCDEFGHIJKLM-.N-.O-.P-.Q-.Q-RS-RT-RU-RV-RW-RX-RY-RZ-R[-R\-R]-R^-R_-R`-Ra-Rb-Rc-Rd-Re-Rf-Rg-Rh-Ri-Rj-Rk-Rl-Rm-Rn-Ro-Rp-Rq-Rr-Rs-Rt-Ru-Rv-Rw-Rx-Ry-Rz-R{-R|-R}-R~-R-R-R-R-R-R-R---------------3838383838383838383838383838                                                              G        !"#$%&'()*+,-.'/00123456789::;<=>?@ABCD+EFGHIJKLLMNOPQRSTUVWXYYZ[\]^^_`abcdefgghhijjkkllmmnopqrstuvwxyz{|}~+,+E+E+E+,+, +,    %quickspec-2.1.2-IhaAeDc6TsZfJXOkiLMj0QuickSpec.Internal.Type QuickSpecQuickSpec.Internal.TermQuickSpec.InternalQuickSpec.Internal.Terminal'QuickSpec.Internal.Testing.DecisionTree"QuickSpec.Internal.Haskell.ResolveQuickSpec.Internal.UtilsQuickSpec.Internal.PropQuickSpec.Internal.TestingQuickSpec.Internal.Pruning%QuickSpec.Internal.Testing.QuickCheck&QuickSpec.Internal.Pruning.UntypedTwee%QuickSpec.Internal.Pruning.Background QuickSpec.Internal.Pruning.Types-QuickSpec.Internal.Pruning.PartialApplicationQuickSpec.Internal.Pruning.TweeQuickSpec.Internal.Parse QuickSpec.Internal.Explore.Terms"QuickSpec.Internal.Explore.Schemas&QuickSpec.Internal.Explore.Polymorphic'QuickSpec.Internal.Explore.ConditionalsQuickSpec.Internal.ExploreQuickSpec.Internal.HaskellmonoTypeObserveinst Data.ListdeleteinsertData.MapMapbaseData.Typeable.InternalTypeable(QuickCheck-2.13.2-1FftnVviu6BCWJanU0jy5VTest.QuickCheck.Arbitrary Arbitrary Data.ProxyProxy'constraints-0.11-3EMd4k0fqTc89hDyJ2uoqpData.ConstraintDictSub:-pretty-1.1.3.6Text.PrettyPrint.HughesPJClass pPrintListpPrint pPrintPrecPretty%twee-lib-2.1.5-6Qo1OW94WgCCfdchUak0rH Twee.BasearityArity EqualsBonus Twee.Pretty prettyPrint termStyle PrettyTerm pPrintTerm TermStyleWrapperwrapreunwrap UnwrappedInValue valueTypePolyunPolyApplytryApplyTypeView unTypeViewTypedtyp otherTypesDL typeSubst_SymAClassFClassEClassDClassCClassBClassAEDCBATyConArrowStringTypetypeVar isTypeVartypeOftypeRep typeFromTyCon applyType arrowType isArrowType unpackArrowtypeArgstypeRestypeDrop typeArity oneTypeVar defaultToskolemiseTypeVars fromTypeRep fromTyContyCon getDictionary isDictionary dictAritysplitConstrainedType pPrintType typeSubsttypesDLtyVarscast matchTypeapplycanApplypolycanonicaliseTypepolyTyp polyRename polyApplypolyPairpolyListpolyMgu toPolyValuetoValue fromValueunwrapmapValueforValueofValue withValue pairValues wrapFunctor unwrapFunctor bringFunctor$fCoArbitraryTermList$fPrettyTermTyCon $fPrettyTyCon$fCoArbitraryTerm $fTyped[] $fTypedEither $fTyped(,) $fTypedTerm$fHasTypeViewTerm$fSymbolicTypeView $fApplyTerm $fApplyPoly $fTypedPoly $fApplyValue $fTypedValue $fShowValue $fEqTyCon $fOrdTyCon $fShowTyCon$fEqPoly $fOrdPoly $fShowPoly $fPrettyPoly:+:InlInr MeasureFunsMeasureSizedsizeSymbolictermsDLsubstVarVvar_tyvar_idTermFun:$::@:termsfunsvarsgetAppfreeVaroccoccVarmapVarsubtermsproperSubterms subtermsFOproperSubtermsFO canonicaliseevalTermmeasure compareFuns $fPrettyVar $fTypedVar $fPrettyTerm $fSymbolicf[]$fSymbolicfTerm $fSizedTerm$fOrdMeasureFuns$fEqMeasureFuns$fPrettyTerm:+: $fPretty:+: $fTyped:+: $fArity:+: $fSized:+:$fEqVar$fOrdVar $fShowVar $fGenericVar$fCoArbitraryVar$fEqTerm $fOrdTerm $fShowTerm $fFunctorTerm$fEq:+:$fOrd:+:Observeobserve==> Signature signatureContextSigunSig quickSpecquickSpecResult addBackgroundrunSigconcustomConstantliftC instanceOf predicate predicateGenmonoTypemonoTypeWithVarsinstFun addInstanceswithPrintFilter backgroundwithoutserieswithMaxTermSizewithMaxCommutativeSize withMaxTestswithMaxTestSizewithPruningDepthwithPruningTermSize withFixedSeedwithInferInstanceTypesboolsarithlistsprelude $fMonoidSig$fSemigroupSig $fSignature[]$fSignatureSigTerminal MonadTerminalputTextputTempputLine putStatus clearStatus withStatuswithNullTerminalwithStdioTerminal Statisticsstat_num_test_casesstat_num_testsstat_num_termsResultEqualToDistinct InnerTreeTestCase Singleton DecisionTreedt_tree dt_test_cases dt_evaluateempty addTestCase statisticstypeVars Data.TypeableTypeRepghc-prim GHC.Types arrowTyCon commaTyCon listTyCon dictTyCon Instances is_instancesis_find valueInst findValue findInstance#key keyDefaultreadingfstLenssndLens makeLensAsrepeatM partitionBycollateisSorted isSortedByusortusortBysortBy'usortBy'orElse unbufferedspoonylabelMappendAt antiunifyfixpoint prettyParen prettyShow prettyNormal PrettyLevelText.PrettyPrint.HughesPJ fullRender renderStylerenderfirstfsepfcatcatsep<+>$+$$$ punctuatehangnestvcathsephcat reduceDocmaybeDoubleQuotes maybeQuotes maybeBraces maybeBrackets maybeParensbracesbracketsparens doubleQuotesquotesrationaldoublefloatintegerintrbracelbracerbracklbrackrparenlparenequalsspacecoloncommasemiisEmpty zeroWidthText sizedTextptexttextcharDoc#Text.PrettyPrint.Annotated.HughesPJstyle TextDetailsStrChrPStrStylemode lineLengthribbonsPerLineModePageMode ZigZagModeLeftMode OneLineMode tupleStyle infixStylepostfixprefiximplicitArguments fixedArity uncurriedcurried invisiblesupply pPrintSet pPrintTuple pPrintEmpty<#>NamedOrdinaryName PrettyArity prettyArityEquation:=:Prop:=>:rhslhsliteralsunitPropmapFun=== prettyPropnameVars MonadTestertest WatchPrunerReadOnlyPrunerwithReadOnlyPruner MonadPruner normaliseradd normalise watchPrunerTester Environmentenv_eval env_tests env_configConfigcfg_fixed_seedcfg_max_test_size cfg_num_testslens_num_testslens_max_test_sizelens_fixed_seedrununiformquickCheckTestNormPrunercfg_max_term_sizecfg_max_cp_depthlens_max_term_sizelens_max_cp_depth normaliseTweenormalFormsTweeaddTweetoTwee skolemise Background addFunction UntypedTerm TypedTermTaggedFuncTag typingAxiomstagencodePartiallyAppliedPartialgetTotalpartialtotal smartApply simpleApplyParseparse parsePropKnew DiscoveredTermstm_treetm_termstm_emptytree treeForType initialStateexploreexplore' mostGeneralRejectedAccepted result_propsSchemas sc_instancessc_instantiated sc_classessc_emptysc_instantiate_singleton sc_single_useclasses single_use instances instantiated instance_ exploreIninstantiateRep instantiate generality mostSpecificallUnificationsPolyMunPolyMUniverse univ_typesPolyFun fun_originalfun_specialised Polymorphic pm_schemas pm_universeschemasunivpolyFunpolyTerm exploreNoMGU regeneralisetypeInstancesList typeInstances intersectionuniverse inUniverseusefulForUniverseWithConstructorNormal ConstructorClassification PredicateSelectorFunction clas_pred clas_index clas_trueclas_selectorsclas_test_caseclassify ConditionalsconditionalsUniverserunConditionalspredTypeconsiderPredicateconsiderConditionalisingconditionallyRedundantconditionallyRedundant' addPredicateconditionalise Enumerator enumerate mapEnumeratorfilterEnumeratorenumerateConstantsenumerateApplicationsfilterUniverse sortTermspPrintSignature tc_eval_vartc_test_result GHC.ClassesOrdarbitraryTestCasearbitraryValuationarbitraryObserverarbitraryFunction evalHaskellWarningswarn_no_observerwarn_no_generatorcfg_print_filtercfg_backgroundcfg_infer_instance_typescfg_default_to cfg_constants cfg_instancescfg_max_commutative_size cfg_max_sizecfg_tweecfg_quickCheckTestCaseWrappedunTestCaseWrapped PredicateableuncrryPredicateTestCaseConstant con_classifycon_sizecon_constraintscon_type con_valuecon_pretty_arity con_stylecon_nameOrdyNamesgetNamesWrappedObserveData ObserveData SingleUse NoWarnings baseInstances observeOrdobserveFunction observeObsbaseTypenames findGenerator findObserver constant'isOp selectorsunhideConstraint evalConstanttruetrueTermlens_quickCheck lens_twee lens_max_sizelens_max_commutative_sizelens_instanceslens_constantslens_default_tolens_infer_instance_typeslens_backgroundlens_print_filter defaultConfig instanceTypeswarningsBool||&&notTrueFalseGHC.Num+IntGHC.Base++.idmap