arbor-monad-metric-1.1.0: test/Arbor/Monad/MetricApp.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Arbor.Monad.MetricApp
( runMetricApp
) where
import Arbor.Monad.Metric
import Control.Monad.Reader
import Data.Generics.Product.Any
import GHC.Generics
import qualified Arbor.Network.StatsD as S
import qualified Arbor.Network.StatsD.Type as Z
newtype MiniConfig = MiniConfig
{ metrics :: Metrics
} deriving (Generic)
instance MonadMetrics MetricApp where
getMetrics = reader metrics
newtype MetricApp a = MetricApp
{ unMetricApp :: ReaderT MiniConfig IO a
}
deriving ( Functor
, Applicative
, Monad
, MonadIO
, MonadReader MiniConfig)
runMetricApp :: MetricApp a -> IO a
runMetricApp f = do
metrics <- newMetricsIO
let config = MiniConfig metrics
runReaderT (unMetricApp f) config