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)
class NoOp a where
noop :: a
instance NoOp (IO a) where
noop = return undefined
instance (NoOp r) => NoOp (a -> r) where
noop _ = noop
note :: (HPrintfType r, NoOp r) => Config -> String -> r
note cfg msg = if fromLJ cfgVerbosity cfg > Quiet
then hPrintf stdout msg
else noop
prolix :: (HPrintfType r, NoOp r) => Config -> String -> r
prolix cfg msg = if fromLJ cfgVerbosity cfg == Verbose
then hPrintf stdout msg
else noop
printError :: (HPrintfType r) => String -> r
printError msg = hPrintf stderr msg