{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
module Preamble.Types.Ctx
( module Preamble.Types.Ctx
) where
import Control.Monad.Catch
import Control.Monad.Logger
import Control.Monad.Reader
import Preamble.Lens
import Preamble.Prelude
import Preamble.Types.Alias
data Ctx = Ctx
{ _cPreamble :: Pairs
, _cLogger :: Logger
}
$(makeClassy ''Ctx)
type MonadCtx c m =
( MonadControl m
, MonadReader c m
, MonadLogger m
, MonadCatch m
, MonadThrow m
, HasCtx c
)
data StatsCtx = StatsCtx
{ _scCtx :: Ctx
, _scLabels :: Tags
, _scStat :: Stat
, _scPrefix :: Text
}
$(makeClassyConstraints ''StatsCtx [''HasCtx])
instance HasCtx StatsCtx where
ctx = scCtx
type MonadStatsCtx c m =
( MonadCtx c m
, HasStatsCtx c
)