criterion-0.1.3: Criterion/Monad.hs
-- |
-- Module : Criterion.Monad
-- Copyright : (c) Neil Brown 2009
--
-- License : BSD-style
-- Maintainer : bos@serpentine.com
-- Stability : experimental
-- Portability : GHC
--
module Criterion.Monad (ConfigM, getConfig, getConfigItem, doIO, withConfig) where
import Control.Monad.Reader (ReaderT, ask, runReaderT)
import Control.Monad.Trans (lift)
import Criterion.Config (Config)
type ConfigM = ReaderT Config IO
getConfig :: ConfigM Config
getConfig = ask
getConfigItem :: (Config -> a) -> ConfigM a
getConfigItem f = f `fmap` getConfig
doIO :: IO a -> ConfigM a
doIO = lift
withConfig :: Config -> ConfigM a -> IO a
withConfig = flip runReaderT