criterion-plus-0.1.0: library/CriterionPlus.hs
-- |
-- Using this library you can create executables with benchmarks.
-- It automatically implants a command-line options parser and info generator.
--
-- Here is an example of how this library is supposed to be used:
--
-- > import CriterionPlus
-- > import qualified SomeMySQLLib as MySQL
-- > import qualified SomePostgreSQLLib as PostgreSQL
-- >
-- > main =
-- > benchmark $ do
-- > standoff "Inserting rows" $ do
-- > subject "MySQL" $ do
-- > -- Exclude the "setup" phase from measurement:
-- > pause
-- > connection <- liftIO $ MySQL.openConnection
-- > -- Measure what we want:
-- > continue
-- > liftIO $ MySQL.insertAThousandRows connection
-- > -- Exclude the "teardown" phase from measurement:
-- > pause
-- > liftIO $ MySQL.closeConnection connection
-- > subject "PostgreSQL" $ do
-- > -- This is how we can exclude the "setup" phase from monad transformers:
-- > pause
-- > PostgreSQL.runSession $ do
-- > lift $ continue
-- > PostgreSQL.insertAThousandRows
-- > -- Exclude "teardown":
-- > lift $ pause
-- > -- Each standoff generates an independent report file:
-- > standoff "Querying" $ do
-- > subject "MySQL" $ error "So on..."
-- > subject "PostgreSQL" $ error "So on..."
--
module CriterionPlus
(
-- * IO
benchmark,
-- * Benchmark
Benchmark,
standoff,
-- * Standoff
Standoff,
group,
subject,
-- * Subject
Subject,
continue,
pause,
-- ** Evaluation
whnf,
nf,
nfIO,
whnfIO,
-- * Shared Types
Name,
)
where
import CriterionPlus.Monads