-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Benchmarking code through strict evaluation -- -- A benchmarking library with a simple purpose: to strictly evaluate a -- value and report how long it takes. -- -- Can be useful to identify the slow part of an algorithm, since -- Haskell's lazy evaluation can make it hard to see where the bottleneck -- lies. @package StrictBench @version 0.1 -- | A library to benchmark how long it takes to fully evaluate a value. -- Can be useful to identify the slow part of an algorithm, since -- Haskell's lazy evaluation can make it hard to see where the bottleneck -- lies. -- -- Full evalution of a value is achieved by the rnf function, -- which requires that the data type of the value being tested is an -- instance of NFData. Making a data type an instance of -- NFData is trivially done by applying rnf to all of its -- fields and seq-ing those together. -- -- Example: -- --
-- data Tree3 a = Leaf a | Branch (Tree3 a) (Tree3 a) (Tree3 a) -- -- instance NFData a => NFData (Tree3 a) where -- rnf (Leaf x) = rnf x -- rnf (Branch l c r) = rnf l `seq` rnf c `seq` rnf r -- -- main = bench . take 13 $ iterate (\x -> Branch x x x) (Leaf 'a') -- -- Output: -- 765.625 ms ---- -- If a data constructor has no fields you can suffice with (), e.g.: -- --
-- data Answer = Yes | No -- -- instance NFData Answer where -- rnf Yes = () -- rnf No = () --module Test.StrictBench -- | Print how long it takes to strictly evaluate the given value. -- -- Example: -- --
-- main = bench [1..10000000 :: Integer] -- -- Output: -- 515.625 ms --bench :: (NFData a) => a -> IO () -- | Like bench, benchDesc prints the time needed to fully evaluate -- the given value. Additionally, it prefixes the time taken with the -- provided string, which can be useful to distinguish between different -- benchmarks. -- -- Example: -- --
-- main = benchDesc "Long string" $ replicate 10000000 'a' -- -- Output: -- Long string: 375.0 ms --benchDesc :: (NFData a) => String -> a -> IO () -- | The function used by bench and benchpress to determine how long (in -- milliseconds) the value takes to calculate. You can use this function -- for instance if you wish to sum the time of several different values. -- -- Example: -- --
-- main = do t1 <- time $ filter (< 10) $ take 1000000 $ repeat (9 :: Int) -- t2 <- time $ reverse $ take 1000000 $ cycle "StrictBench" -- print $ t1 + t2 -- -- Output: -- 562.5 --time :: (NFData a) => a -> IO Double