_]      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\ $(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)Safe]' isFunction f' returns ^% iff the top level "constructor" of f is a function arrow._GThis function is rather fragile, but should be OK. It is only used by Test.ChasingBottoms.ApproxShowk, which should only be used for debugging purposes anyway. The unit type is not considered to be a tuple.]`_ab]_ab]`_ab$(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)None0Natural numbers.No cF instance is provided, because the implementation should be abstract. 0 == d(, for other total natural numbers it is ^. 0 == e,  (n+1) == f n for a total natural number n.1 performs primitive recursion on natural numbers. is a fold on natural numbers:   g h =  g (g h h . i) jklm jklm $(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimental$non-portable (preemptive scheduling)Safe0T n c runs c for at most n% seconds (modulo scheduling issues).0If the computation terminates before that, then  v is returned, where vS is the resulting value. Note that this value may be equal to bottom, e.g. if c = n .,If the computation does not terminate, then  is returned.-If the computation raises an exception, then  e is returned, where e is the exception.PNote that a user-defined exception is used to terminate the computation, so if cB catches all exceptions, or blocks asynchronous exceptions, then  may fail to function properly. takes a delay in microseconds. Note that the resolution is not necessarily very high (the last time I checked it was 0.02 seconds when using the standard runtime system settings for GHC).G is a variant which can be used for pure computations. The definition,   n =  n . o  ensures that  1  usually returns  <something>. ( 1 (n ) usually returns  l; in other words, the computation reaches whnf almost immediately, defeating the purpose of the time-out.) is the equivalent variant of :   n =  n . o pqrs pqrs$(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (exceptions)NoneT8 generates a bottom that is suitable for testing using . a returns d if a is distinct from bottom. If aP equals bottom and results in an exception of a certain kind (see below), then  a = ^. If aX never reaches a weak head normal form and never throws one of these exceptions, then  a never terminates.The exceptions that yield ^M correspond to "pure bottoms", i.e. bottoms that can originate in pure code:tuvwxyz{Assertions are excluded, because their behaviour depends on compiler flags (not pure, and a failed assertion should really yield an exception and nothing else). The same applies to arithmetic exceptions (machine dependent, except possibly for |;, but the value infinity makes that case unclear as well). s raises an exception (}) that is not caught by . Use s to describe the exception. timeOutLimit works like  , but if  timeOutLimit is f lim&, then computations taking more than lim seconds are also considered to be equal to bottom. Note that this is a very crude approximation of what a bottom is. Also note that this "function" may return different answers upon different invocations. Take it for what it is worth.) is subject to all the same vagaries as . A variant of  that lives in the ~ monad. A variant of  that lives in the ~ monad.$(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)None9;T The c instance of  makes sure that   n5 behaves (more or less) like the derived version of !, with the following differences:After n> levels of descent into a term the output is replaced by "_".5All detectable occurences of bottoms are replaced by "_|_".&Non-bottom functions are displayed as "<function /= _|_>".#Precedence level. !"#$ !"## !" !"#$$(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)None9;T%% is a class for approximation functions as described in The generic approximation lemma, Graham Hutton and Jeremy Gibbons, Information Processing Letters, 79(4):197-201, Elsevier Science, August 2001,  &http://www.cs.nott.ac.uk/~gmh/bib.html..Instances are provided for all members of the c+ type class. Due to the limitations of the  Data.Generics approach to generic programming, which is not really aimed at this kind of application, the implementation is only guaranteed to perform correctly, with respect to the paper (and modulo any bugs), on non-mutually-recursive sum-of-products datatypes. In particular, nested and mutually recursive types are not handled correctly with respect to the paper. The specification below is correct, though (if we assume that the c instances are well-behaved).In practice the &+ function can probably be more useful than '. It traverses down allY subterms, and it should be possible to prove a variant of the approximation lemma which & satisfies.&& n x traverses n levels down in x5 and replaces all values at that level with bottoms.'' works like &, but the traversal and replacement is only performed at subterms of the same monomorphic type as the original term. For polynomial datatypes this is exactly what the version of approx$ described in the paper above does.%&'(%&'%&'%&'($(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)None9;OT))g contains methods for testing whether two terms are related according to the semantic domain ordering... tweak x y returns e if x and y are incomparable, and f o otherwise, where o :: " represents the relation between x and y.2x / y and x 0 yF compute the least upper and greatest lower bounds, respectively, of x and y in the semantical domain ordering. Note that the least upper bound may not always exist. This functionality was implemented just because it was possible (and to provide analogues of  and  in the = class). If anyone finds any use for it, please let me know.33H contains methods for testing whether two terms are semantically equal.7<The behaviour of some of the functions below can be tweaked.9 If equal to f n, an & n\ is performed on all arguments before doing whatever the function is supposed to be doing.: If equal to f n-, then all computations that take more than n4 seconds to complete are considered to be equal to +. This functionality is implemented using .;No tweak (both fields are e).)*+,-./0123456789:;<=)*+,-/0.12345678:9;789:;3456)*+,-./012) *+,-./0123456789:;<=*4+4,4-4/5054454$(c) Nils Anders Danielsson 2005-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)None0IOTAIMonad for generating results given previously generated pattern matches.A A a@ should be implemented almost as other generators for the type a, with the difference that L should be used wherever the resulting function should be allowed to pattern match (typically for each constructor emitted). See example above.BThe type of a D generator.9This newtype is (currently) necessary if we want to use C& as an argument to a type constructor.C$The type of a generator transformer.DD packages up the possible outcomes of a pattern match in a style suitable for generating functions. A pattern match is a generator (H) transformer based on the top-level constructor, and a sequence (see  @http://www.soi.city.ac.uk/~ross/software/html/Data.Sequence.html) of D-es based on the children of that constructor.F)A generator transformer, in the style of .G5Further pattern matches made possible by this match.HGenerator for continuous, not necessarily strict functions. Functions are generated by first generating pattern matches, and then generating a result.II specialises H:  I = H J JGeneric implementation of D construction.Lowering of a A.K Lifting of a . Returns the  in scope.LLP makes sure that the pattern matches get to influence the generated value. See A.Extracts some pattern matches to trigger right away. These triggered pattern matches may result in new pattern matches which may in turn also be triggered, and so on.Concatenates arguments.Composes arguments. Partitions a . The first argument (a positive integer) is the relative probability with which elements end up in the second part compared to the first one.M Lifting of .N Lifting of .O Lifting of .P Lifting of .Q Lifting of .R Lifting of .S Lifting of .TAn implementation of A a which is suitable when a is flat and has an 2 instance. Yields bottoms around 10% of the time.UThis A yields finite partial lists.VThis A yields infinite partial lists.WThis A) yields finite or infinite partial lists.)ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUVWHIDEFGCBALKMNOPQRSJTUVW!ABCDEFGHIJKLMNOPQRSTUVW $(c) Nils Anders Danielsson 2004-2016See the file LICENCE. http://www.cse.chalmers.se/~nad/ experimentalnon-portable (GHC-specific)NoneE !"#%&')*+,-/0.12345678:9;ABCDEFGHIJKLMNOPQRSTUVW     !"#$%&'()*+,-./0123456789:;<=>?@AABCDEFGHIJKLMMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnofgpmqrmqsmtumqvmtw xyzmq{m|}~~mmmmmmmmmmfgmfgfff-ChasingBottoms-1.3.1.2-3iVfPqKP4WoJW9xfMAoxY2Test.ChasingBottoms.NatTest.ChasingBottoms.IsBottomTest.ChasingBottoms.TimeOutTest.ChasingBottoms.ApproxShowTest.ChasingBottoms.ApproxTest.ChasingBottoms.SemanticOrd'Test.ChasingBottoms.ContinuousFunctionsTest.ChasingBottoms.IsTypeTest.ChasingBottomsNatisSuccfromSuccnatrecfoldN$fCoArbitraryNat$fArbitraryNat $fShowNat $fEnumNat $fIntegralNat $fRealNat$fNumNat$fEqNat$fOrdNatbottomResultValueNonTermination ExceptiontimeOut timeOutMicrotimeOut' timeOutMicro'$fExceptionDie $fShowResult $fShowDieisBottomnonBottomErrorisBottomTimeOut isBottomIOisBottomTimeOutIO ApproxShowapproxShowsPrec approxShows approxShowPrec $fApproxShowaApprox approxAllapprox $fApproxa SemanticOrd=!>!semanticCompare\/!/\! semanticJoin semanticMeet SemanticEq==!/=! semanticEqTweak approxDepth timeOutLimitnoTweak$fSemanticOrda $fSemanticEqa $fEqTweak $fOrdTweak $fShowTweak MakeResultMakePMGenTransformer PatternMatchapplymorefunction functionTomatchlift' transform arbitrary'choose' elements'oneof' frequency'sized'resize'flat finiteListOfinfiniteListOflistOf $fShowTree $fDataTree$fFunctorMakeResult$fApplicativeMakeResult$fMonadMakeResult isFunctionghc-prim GHC.TypesTrueisTupleconisStringisListbase Data.DataDataFalseGHC.BaseNothingJust Data.Tuplecurry$sndnat2intstealsteal2returnGHC.IOevaluateDie killThread'mainGHC.IO.ExceptionArrayException GHC.Exception ErrorCallControl.Exception.Base NoMethodErrorPatternMatchFail RecConError RecSelError RecUpdError DivideByZeroAssertionFailedIOGHC.Show showsPrec gShowsPrecdrivenil.^.appPrecminPrecshowConisAtom isPrimitiveisInfixwrapwhen' approxGen approxAllGen approxGen'Ordering GHC.ClassesmaxminOrdRelRel'liftAppr semanticEq' semanticLE'allOK=^= childrenOK semanticMeet' semanticJoin'GenTransformer''QuickCheck-2.9.2-AzbjWrJo3WFD60ZxKurQ3sTest.QuickCheck.GenGenTest.QuickCheck.Arbitrary coarbitraryrungetPMsPatternMatches getMatchesconcatcompose partition'containers-0.5.7.1 Data.SequenceSeq arbitrarychooseelementsoneof frequencysizedresize ArbitraryMRunMRTreeBranchLeafGenT matchFlat matchTreewithPMs makeResult