criterion- Robust, reliable performance measurement and analysis

Safe HaskellNone




Types for benchmarking.

The core class is Benchmarkable, which admits both pure functions and IO actions.

For a pure function of type a -> b, the benchmarking harness calls this function repeatedly, each time with a different Int argument, and reduces the result the function returns to weak head normal form. If you need the result reduced to normal form, that is your responsibility.

For an action of type IO a, the benchmarking harness calls the action repeatedly, but does not reduce the result.


Benchmark descriptions

class Benchmarkable a whereSource

A benchmarkable function or action.




:: a

The function or action to benchmark.

-> Int

The number of times to run or evaluate it.

-> IO () 

Run a function or action the specified number of times.

data Benchmark whereSource

A benchmark may consist of either a single Benchmarkable item with a name, created with bench, or a (possibly nested) group of Benchmarks, created with bgroup.


data Pure Source

A container for a pure function to benchmark, and an argument to supply to it each time it is evaluated.


whnf :: (a -> b) -> a -> PureSource

Apply an argument to a function, and evaluate the result to weak head normal form (WHNF).

nf :: NFData b => (a -> b) -> a -> PureSource

Apply an argument to a function, and evaluate the result to head normal form (NF).

nfIO :: NFData a => IO a -> IO ()Source

Perform an action, then evaluate its result to head normal form. This is particularly useful for forcing a lazy IO action to be completely performed.

whnfIO :: IO a -> IO ()Source

Perform an action, then evaluate its result to weak head normal form (WHNF). This is useful for forcing an IO action whose result is an expression to be evaluated down to a more useful value.



:: Benchmarkable b 
=> String

A name to identify the benchmark.

-> b 
-> Benchmark 

Create a single benchmark.



:: String

A name to identify the group of benchmarks.

-> [Benchmark]

Benchmarks to group under this name.

-> Benchmark 

Group several benchmarks together under a common name.

bcompare :: [Benchmark] -> BenchmarkSource

Compare benchmarks against a reference benchmark (The first bench in the given list).

The 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

benchNames :: Benchmark -> [String]Source

Retrieve the names of all benchmarks. Grouped benchmarks are prefixed with the name of the group they're in.

Result types