labsat-0.0.1: src/Labsat/Ctx.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
module Labsat.Ctx where
import Data.Conduit.Network (AppData, clientSettings, runGeneralTCPClient)
import Preamble
data LabsatCtx = LabsatCtx
{ _lsStatsCtx :: StatsCtx
, _lsAppData :: AppData
}
$(makeClassyConstraints ''LabsatCtx [''HasStatsCtx])
instance HasStatsCtx LabsatCtx where
statsCtx = lsStatsCtx
instance HasCtx LabsatCtx where
ctx = statsCtx . ctx
type MonadLabsatCtx c m =
( MonadStatsCtx c m
, HasLabsatCtx c
)
runLabsatCtx :: MonadStatsCtx c m => ByteString -> Int -> TransT LabsatCtx m a -> m a
runLabsatCtx host port action =
runGeneralTCPClient (clientSettings port host) $ \ad -> do
e <- view statsCtx
runTransT (LabsatCtx e ad) action