hs-opentelemetry-api
Copyright(c) Ian Duncan 2021-2026
LicenseBSD-3
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

OpenTelemetry.Trace.Monad

Description

Overview

Higher-level tracing interface that obtains the Tracer from your monad stack via MonadTracer, eliminating the need to pass it explicitly.

Quick example

data App = App { appTracer :: Tracer }

instance MonadTracer (ReaderT App IO) where
  getTracer = asks appTracer

handleRequest :: (MonadUnliftIO m, MonadTracer m) => Request -> m Response
handleRequest req = inSpan "handleRequest" defaultSpanArguments $ do
  user <- inSpan "lookupUser" defaultSpanArguments $ lookupUser req
  inSpan "buildResponse" defaultSpanArguments $ buildResponse user

Variants

  • inSpan : simple wrapper, no span access in callback
  • inSpan' : passes the Span to the callback for adding attributes
  • inSpan'' : raw variant, no automatic source-location capture

All variants automatically end the span and record exceptions, just like their counterparts in OpenTelemetry.Trace.Core.

When to use this vs Trace.Core

Use this module when your application has a monad stack with a Tracer in the environment. Use OpenTelemetry.Trace.Core when you have the Tracer as an explicit argument or need lower-level control.

Synopsis

Documentation

inSpan :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> m a -> m a Source #

Since: 0.0.1.0

inSpan' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a Source #

Since: 0.0.1.0

inSpan'' :: (MonadUnliftIO m, MonadTracer m, HasCallStack) => Text -> SpanArguments -> (Span -> m a) -> m a Source #

Since: 0.4.0.0

class Monad m => MonadTracer (m :: Type -> Type) where Source #

This is generally scoped by Monad stack to do different things

Since: 0.0.1.0

Methods

getTracer :: m Tracer Source #

Instances

Instances details
MonadTracer m => MonadTracer (IdentityT m) Source # 
Instance details

Defined in OpenTelemetry.Trace.Monad

MonadTracer m => MonadTracer (ReaderT r m) Source # 
Instance details

Defined in OpenTelemetry.Trace.Monad