module Main ( main ) where import Criterion.Main ( bench , bgroup , defaultMain , nf , whnf ) import Criterion.Types ( Pure ) -- | An example function to benchmark... -- fib :: Int -> Int fib 0 = 0 fib 1 = 0 fib n = fib (n - 1) + fib (n - 2) main :: IO () main = defaultMain -- when benchmarking **pure** functions, use one of the following two functions to produce a Benchmark: -- @ nf :: (a -> b) -> a -> Pure @ evaluates the given expression with the given argument to normal form -- @ whnf :: (a -> b) -> a -> Pure @ evaluates the given expression with the given argument to weak head normal form -- you can group benchmarks together with `bgroup`, benchmarks groups can contain benchmarks groups also [ bgroup "Example Group 1" [ bench "fib 10 (Normal Form)" $ nf (const (fib 10)) () , bench "fib 10 (Weak Head Normal Form)" $ whnf (const (fib 10)) () ] , bgroup "Example Group 2" [ bench "fib 20 (Normal Form)" $ nf (const (fib 20)) () , bench "fib 20 (Weak Head Normal Form)" $ whnf (const (fib 20)) () ] ]