{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module OpenTelemetry.Trace.Monad (
inSpan,
inSpan',
OpenTelemetry.Trace.Monad.inSpan'',
MonadTracer (..),
) where
import Control.Monad.IO.Unlift
import Control.Monad.Identity (IdentityT)
import Control.Monad.Reader (ReaderT)
import Control.Monad.Trans (MonadTrans (lift))
import Data.Text (Text)
import GHC.Stack
import OpenTelemetry.Trace.Core (
Span,
SpanArguments (..),
Tracer,
inSpan'',
)
class Monad m => MonadTracer m where
getTracer :: m Tracer
inSpan ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text ->
SpanArguments ->
m a ->
m a
inSpan :: forall (m :: * -> *) a.
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text -> SpanArguments -> m a -> m a
inSpan Text
n SpanArguments
args m a
m = forall (m :: * -> *) a.
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
CallStack -> Text -> SpanArguments -> (Span -> m a) -> m a
OpenTelemetry.Trace.Monad.inSpan'' HasCallStack => CallStack
callStack Text
n SpanArguments
args (forall a b. a -> b -> a
const m a
m)
inSpan' ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text ->
SpanArguments ->
(Span -> m a) ->
m a
inSpan' :: forall (m :: * -> *) a.
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text -> SpanArguments -> (Span -> m a) -> m a
inSpan' = forall (m :: * -> *) a.
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
CallStack -> Text -> SpanArguments -> (Span -> m a) -> m a
OpenTelemetry.Trace.Monad.inSpan'' HasCallStack => CallStack
callStack
inSpan'' ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
CallStack ->
Text ->
SpanArguments ->
(Span -> m a) ->
m a
inSpan'' :: forall (m :: * -> *) a.
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
CallStack -> Text -> SpanArguments -> (Span -> m a) -> m a
inSpan'' CallStack
cs Text
n SpanArguments
args Span -> m a
f = do
Tracer
t <- forall (m :: * -> *). MonadTracer m => m Tracer
getTracer
forall (m :: * -> *) a.
(MonadUnliftIO m, HasCallStack) =>
Tracer
-> CallStack -> Text -> SpanArguments -> (Span -> m a) -> m a
OpenTelemetry.Trace.Core.inSpan'' Tracer
t CallStack
cs Text
n SpanArguments
args Span -> m a
f
instance MonadTracer m => MonadTracer (IdentityT m) where
getTracer :: IdentityT m Tracer
getTracer = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadTracer m => m Tracer
getTracer
instance {-# OVERLAPPABLE #-} MonadTracer m => MonadTracer (ReaderT r m) where
getTracer :: ReaderT r m Tracer
getTracer = forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift forall (m :: * -> *). MonadTracer m => m Tracer
getTracer