úÎ’G‹Jn      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m  Safe-InferednopqrsnopqrsnopqrsGHC experimentalbos@serpentine.com Safe-Infered;Result of a bootstrap analysis of a non-parametric sample. @Analysis of the extent to which outliers in a sample affect its 4 standard deviation (and to some extent, its mean). #Qualitative description of effect. %Brief textual description of effect. AQuantitative description of effect (a fraction between 0 and 1). AA description of the extent to which outliers in the sample data 0 affect the sample mean and standard deviation. Above 50% (i.e. measurements  are useless). Between 10% and 50%. Between 1% and 10%. Less than 1% effect. 8Outliers from sample data, calculated using the boxplot  technique. :More than 3 times the interquartile range (IQR) below the  first quartile. :Between 1.5 and 3 times the IQR below the first quartile. :Between 1.5 and 3 times the IQR above the third quartile. 4More than 3 times the IQR above the third quartile.  tuvwx       tuvwxGHC experimentalbos@serpentine.com Safe-Infered +A benchmark may consist of either a single  item  with a name, created with !", or a (possibly nested) group of  s, created with ". AA container for a pure function to benchmark, and an argument to ) supply to it each time it is evaluated. $A benchmarkable function or action. 8Run a function or action the specified number of times. AApply an argument to a function, and evaluate the result to weak  head normal form (WHNF). AApply an argument to a function, and evaluate the result to head  normal form (NF). APerform an action, then evaluate its result to head normal form. @ This is particularly useful for forcing a lazy IO action to be  completely performed. @Perform an action, then evaluate its result to weak head normal D form (WHNF). This is useful for forcing an IO action whose result ? is an expression to be evaluated down to a more useful value. !Create a single benchmark. "7Group several benchmarks together under a common name. #1Compare benchmarks against a reference benchmark  (The first ! in the given list). MThe results of the comparisons are written to a CSV file specified using the  -r< command line flag. The CSV file uses the following format: *Reference,Name,% faster than the reference$>Retrieve the names of all benchmarks. Grouped benchmarks are ) prefixed with the name of the group they're in. %The function or action to benchmark. +The number of times to run or evaluate it.  !"A name to identify the benchmark. ",A name to identify the group of benchmarks. %Benchmarks to group under this name. #$yz{ !"#$ !"#$ !"#$yz{GHC experimentalbos@serpentine.com Safe-Infered%&'()%&'()'()%&%&'()GHC experimentalbos@serpentine.com Safe-Infered*!Top-level program configuration. ,The "version" banner to print. -Confidence interval to use. .&Whether to run the GC between passes. /'Whether to print information and exit. 0 Number of resamples to perform. 1Filename of report. 2Number of samples to collect. 3Filename of summary CSV. 4 Filename of the comparison CSV. 5Filename of report template. 6Whether to run verbosely. 7APrint some information and exit, without running any benchmarks. 8 Print a help/usaage message. 9&Print version information (if known). :"Print a list of known benchmarks. ;+Do not actually print-and-exit. (Default.) <-Control the amount of information displayed. @(A configuration with sensible defaults. AConstructor for | values. BDeconstructor for | values. *+,-./0123456789:;<=>?@ABField to access. Default to use. }~*+,-./0123456789:;<=>?@AB*+,-./01234567;:98<?>=@BA* +,-./01234567;:98<?>=@AB}~GHC experimentalbos@serpentine.comNoneC1The monad in which most criterion code executes. CDEFCDEFCDEFCDEFGHC experimentalbos@serpentine.com Safe-InferedG'An internal class that acts like Printf/ HPrintf. BThe implementation is visible to the rest of the program, but the  details of the class are not. HPrint a "normal" note. IPrint verbose output. JPrint an error message. K#Add to summary CSV (if applicable) GHIJK€GHIJKGHJIKGHIJK€GHC experimentalbos@serpentine.com Safe-InferedL>Classify outliers in a data set, using the boxplot technique. M?Compute the extent to which outliers in the sample data affect ) the sample mean and standard deviation. N0Count the total number of outliers in a sample. ODisplay the mean of a ‚ , and characterise the outliers  present in the sample. P Multiply the Estimate+s in an analysis by the given value, using  ƒ. Q9Perform a bootstrap analysis of a non-parametric sample. RDisplay a report of the  present in a ‚. LM#Bootstrap estimate of sample mean. Bootstrap estimate of sample  standard deviation. Number of original iterations. NONumber of iterations used to  compute the sample. PValue to multiply by. Q'Confidence interval (between 0 and 1).  Sample data. Number of resamples to perform  when bootstrapping. R LMNOPQR   QPONLRMLMNOPQRGHC experimentalbos@serpentine.com Safe-InferedS/Measured aspects of the execution environment. UClock resolution (in seconds). V.The cost of a single clock call (in seconds). W#Measure the execution environment. STUVWSTUVWSTUVWSTUVW GHC experimentalbos@serpentine.com Safe-Infered X!A problem arose with a template. Y!The template could not be found. a=The path to the template and other files used for generating  reports. bWrite out a series of Z values to a single file, if  configured to do so. cFormat a series of Z! values using the given Hastache  template. d!Render the elements of a vector. *For example, given this piece of Haskell:  „ $ \name ->  case name of  "foo" -> d "x" foo0It will substitute each value in the vector for x in the  following Hastache template:  {{#foo}}  {{x}}  {{/foo}} e$Render the elements of two vectors. fBAttempt to include the contents of a file based on a search path.  Returns …4 if the search fails or the file could not be read. Intended for use with Hastache's †, for example:  context "include" = † $ f [a]Hastache template expansion is not performed within the included D file. No attempt is made to ensure that the included file path is A safe, i.e. that it does not refer to an unexpected file such as  "etcpasswd". gLoad a Hastache template file. @If the name is an absolute or relative path, the search path is  not2 used, and the name is treated as a literal path. This function throws a X if the template could  not be found, or an ‡! if no template could be loaded. XYZ[\]^_`abcHastache template. dName to use when substituting. e)Name for elements from the first vector. *Name for elements from the second vector. First vector. Second vector. fDirectories to search.  Name of the file to search for. g Search path. Name of template file. ˆXYZ[\]^_`abcdefgZ[\]^_`cbXYgfade XYZ[\]^_`abcdefgˆ GHC experimentalbos@serpentine.com Safe-Inferedh9Run a single benchmark, and return timings measured when  executing it. i*Run, and analyse, one or more benchmarks. hiA predicate that chooses # whether to run a benchmark by its  name.  !"hi  !"hihi GHC experimentalbos@serpentine.com Safe-Inferedj3The standard options accepted on the command line. kParse command line options. l%An entry point that can be used as a main function.  import Criterion.Main   fib :: Int -> Int  fib 0 = 0  fib 1 = 1  fib n = fib (n-1) + fib (n-2)   main = defaultMain [ 0 bgroup "fib" [ bench "10" $ whnf fib 10 0 , bench "35" $ whnf fib 35 0 , bench "37" $ whnf fib 37  ]  ] m%An entry point that can be used as a main function, with  configurable defaults.  Example:   import Criterion.Config * import qualified Criterion.MultiMap as M  import Criterion.Main   myConfig = defaultConfig { ) -- Always GC between runs. ( cfgPerformGC = ljust True  }  / main = defaultMainWith myConfig (return ()) [ ' bench "fib 30" $ whnf fib 30  ] !If you save the above example as "Fib.hs", you should be able  to compile it as follows:   ghc -O --make Fib Run " Fib --help". on the command line to get a list of command  line options. jklm5Prepare data prior to executing the first benchmark.  !"#jklm!"# lmjkjklm‰   !" #$%&'()*+,-./01233456789:;<=>?@ABCDEFGHIJ KLMNOPQRSTUVWXYZZ[\] ^ _ ` ` a b c d e f g h i j k l m n o p q r s t u v w xyz{|}~€‚ƒ„…†‡ˆ‰Š‹‰ŒWŽ‘’“”•– —˜criterion-0.6.1.1Criterion.Analysis.TypesCriterion.TypesCriterion.MeasurementCriterion.ConfigCriterion.Monad Criterion.IOCriterion.AnalysisCriterion.EnvironmentCriterion.Report CriterionCriterion.MainPaths_criterionSampleAnalysisanMeananStdDev anOutlierVarOutlierVarianceovEffectovDesc ovFraction OutlierEffectSevereModerateSlight UnaffectedOutliers samplesSeen lowSeverelowMildhighMild highSevere Benchmark BenchCompare BenchGroupPure BenchmarkablerunwhnfnfnfIOwhnfIObenchbgroupbcompare benchNamestimetime_getTime runForAtLeastsecsConfig cfgBannercfgConfInterval cfgPerformGC cfgPrintExit cfgResamples cfgReport cfgSamplescfgSummaryFilecfgCompareFile cfgTemplate cfgVerbosity PrintExitHelpVersionListNada VerbosityVerboseNormalQuiet defaultConfigljustfromLJ getConfig getConfigItem withConfigCritHPrintfTypenoteprolix printErrorsummaryclassifyOutliersoutlierVariance countOutliers analyseMeanscale analyseSample noteOutliers EnvironmentenvClockResolution envClockCostmeasureEnvironmentTemplateExceptionTemplateNotFoundReport reportNumber reportName reportTimesreportAnalysisreportOutliers templateDirreport formatReportvectorvector2 includeFile loadTemplate runBenchmark runAndAnalysedefaultOptions parseArgs defaultMaindefaultMainWithversion getBinDir getLibDir getDataDir getLibexecDirgetDataFileName$fNFDataSampleAnalysis$fNFDataOutlierVariance$fMonoidOutliers$fNFDataOutlierEffect$fNFDataOutliers$fShowBenchmark$fBenchmarkableIO$fBenchmarkablePurebase Data.MonoidLast$fMonoidConfig$fMonoidPrintExit$fCritHPrintfType(->)$fCritHPrintfTypeIO$fCritHPrintfTypeCriterionstatistics-0.10.1.0Statistics.TypesSampleStatistics.Resampling.Bootstraphastache-0.4.2Text.Hastache.Context mkStrContextbytestring-0.9.2.1Data.ByteStringempty Text.Hastache MuLambdaMGHC.IO.Exception IOException$fExceptionTemplateException