criterion-0.1: Criterion/IO.hs
-- |
-- Module : Criterion.IO
-- Copyright : (c) Bryan O'Sullivan 2009
--
-- License : BSD-style
-- Maintainer : bos@serpentine.com
-- Stability : experimental
-- Portability : GHC
--
-- Input and output actions.
module Criterion.IO
(
NoOp
, note
, printError
, prolix
) where
import Criterion.Config (Config, Verbosity(..), cfgVerbosity, fromLJ)
import System.IO (stderr, stdout)
import Text.Printf (HPrintfType, hPrintf)
-- | A typeclass hack to match that of the 'HPrintfType' class.
class NoOp a where
noop :: a
instance NoOp (IO a) where
noop = return undefined
instance (NoOp r) => NoOp (a -> r) where
noop _ = noop
-- | Print a \"normal\" note.
note :: (HPrintfType r, NoOp r) => Config -> String -> r
note cfg msg = if fromLJ cfgVerbosity cfg > Quiet
then hPrintf stdout msg
else noop
-- | Print verbose output.
prolix :: (HPrintfType r, NoOp r) => Config -> String -> r
prolix cfg msg = if fromLJ cfgVerbosity cfg == Verbose
then hPrintf stdout msg
else noop
-- | Print an error message.
printError :: (HPrintfType r) => String -> r
printError msg = hPrintf stderr msg