labsat-0.0.3: 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
-- ^ Parent context
, _lsAppData :: AppData
-- ^ AppData for runGeneralTCPClient
, _lsDelay :: Maybe Int
-- ^ Command delay
}
$(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 -> Maybe Int -> TransT LabsatCtx m a -> m a
runLabsatCtx host port timeout action =
runGeneralTCPClient (clientSettings port host) $ \ad -> do
e <- view statsCtx
runTransT (LabsatCtx e ad timeout) action