{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TupleSections #-}
module Hermod.Tracing.API (module Export, contramapM, contramapMCond, foldTraceM, foldCondTraceM, filterTrace) where
import Hermod.Tracing.Types as Export hiding (Trace(..), TraceControl(..), LoggingContext(..), LogDoc(..))
import Hermod.Tracing.Types as Export (Trace)
import Hermod.Tracing.Trace.Combinators as Export (traceWith, routingTrace)
import Hermod.Tracing.Trace as Export (filterTraceMaybe)
import qualified Hermod.Tracing.Trace.Combinators as Internal (contramapM, contramapMCond , foldTraceM, foldCondTraceM)
import qualified Hermod.Tracing.Trace as Internal (filterTrace)
import Control.Monad.IO.Unlift
{-# INLINE contramapM #-}
contramapM :: Monad m
=> Trace m b
-> (a -> m b)
-> Trace m a
contramapM :: forall (m :: * -> *) b a.
Monad m =>
Trace m b -> (a -> m b) -> Trace m a
contramapM Trace m b
tr a -> m b
f = Trace m b
-> ((LoggingContext, Either TraceControl a)
-> m (LoggingContext, Either TraceControl b))
-> Trace m a
forall (m :: * -> *) b a.
Monad m =>
Trace m b
-> ((LoggingContext, Either TraceControl a)
-> m (LoggingContext, Either TraceControl b))
-> Trace m a
Internal.contramapM Trace m b
tr (LoggingContext, Either TraceControl a)
-> m (LoggingContext, Either TraceControl b)
forall {t} {a}. (t, Either a a) -> m (t, Either a b)
apply where
apply :: (t, Either a a) -> m (t, Either a b)
apply (t
x, Left a
c) = (t, Either a b) -> m (t, Either a b)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (t
x, a -> Either a b
forall a b. a -> Either a b
Left a
c)
apply (t
lc, Right a
x) = (t
lc, ) (Either a b -> (t, Either a b))
-> (b -> Either a b) -> b -> (t, Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Either a b
forall a b. b -> Either a b
Right (b -> (t, Either a b)) -> m b -> m (t, Either a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> m b
f a
x
{-# INLINE contramapMCond #-}
contramapMCond :: Monad m
=> Trace m b
-> (a -> m (Maybe b))
-> Trace m a
contramapMCond :: forall (m :: * -> *) b a.
Monad m =>
Trace m b -> (a -> m (Maybe b)) -> Trace m a
contramapMCond Trace m b
tr a -> m (Maybe b)
f = Trace m b
-> ((LoggingContext, Either TraceControl a)
-> m (Maybe (LoggingContext, Either TraceControl b)))
-> Trace m a
forall (m :: * -> *) b a.
Monad m =>
Trace m b
-> ((LoggingContext, Either TraceControl a)
-> m (Maybe (LoggingContext, Either TraceControl b)))
-> Trace m a
Internal.contramapMCond Trace m b
tr (LoggingContext, Either TraceControl a)
-> m (Maybe (LoggingContext, Either TraceControl b))
forall {t} {a}. (t, Either a a) -> m (Maybe (t, Either a b))
apply where
apply :: (t, Either a a) -> m (Maybe (t, Either a b))
apply (t
x, Left a
c) = Maybe (t, Either a b) -> m (Maybe (t, Either a b))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ((t, Either a b) -> Maybe (t, Either a b)
forall a. a -> Maybe a
Just (t
x, a -> Either a b
forall a b. a -> Either a b
Left a
c))
apply (t
lc, Right a
x) = (b -> (t, Either a b)) -> Maybe b -> Maybe (t, Either a b)
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((t
lc, ) (Either a b -> (t, Either a b))
-> (b -> Either a b) -> b -> (t, Either a b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. b -> Either a b
forall a b. b -> Either a b
Right) (Maybe b -> Maybe (t, Either a b))
-> m (Maybe b) -> m (Maybe (t, Either a b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> m (Maybe b)
f a
x
foldTraceM :: forall a acc m . (MonadUnliftIO m)
=> (acc -> a -> m acc)
-> acc
-> Trace m (Folding a acc)
-> m (Trace m a)
foldTraceM :: forall a acc (m :: * -> *).
MonadUnliftIO m =>
(acc -> a -> m acc)
-> acc -> Trace m (Folding a acc) -> m (Trace m a)
foldTraceM acc -> a -> m acc
cata = (acc -> LoggingContext -> a -> m acc)
-> acc -> Trace m (Folding a acc) -> m (Trace m a)
forall a acc (m :: * -> *).
MonadUnliftIO m =>
(acc -> LoggingContext -> a -> m acc)
-> acc -> Trace m (Folding a acc) -> m (Trace m a)
Internal.foldTraceM ((a -> m acc) -> LoggingContext -> a -> m acc
forall a b. a -> b -> a
const ((a -> m acc) -> LoggingContext -> a -> m acc)
-> (acc -> a -> m acc) -> acc -> LoggingContext -> a -> m acc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. acc -> a -> m acc
cata)
foldCondTraceM :: forall a acc m . (MonadUnliftIO m)
=> (acc -> a -> m acc)
-> acc
-> (a -> Bool)
-> Trace m (Folding a acc)
-> m (Trace m a)
foldCondTraceM :: forall a acc (m :: * -> *).
MonadUnliftIO m =>
(acc -> a -> m acc)
-> acc -> (a -> Bool) -> Trace m (Folding a acc) -> m (Trace m a)
foldCondTraceM acc -> a -> m acc
cata = (acc -> LoggingContext -> a -> m acc)
-> acc -> (a -> Bool) -> Trace m (Folding a acc) -> m (Trace m a)
forall a acc (m :: * -> *).
MonadUnliftIO m =>
(acc -> LoggingContext -> a -> m acc)
-> acc -> (a -> Bool) -> Trace m (Folding a acc) -> m (Trace m a)
Internal.foldCondTraceM ((a -> m acc) -> LoggingContext -> a -> m acc
forall a b. a -> b -> a
const ((a -> m acc) -> LoggingContext -> a -> m acc)
-> (acc -> a -> m acc) -> acc -> LoggingContext -> a -> m acc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. acc -> a -> m acc
cata)
filterTrace :: Monad m
=> (a -> Bool)
-> Trace m a
-> Trace m a
filterTrace :: forall (m :: * -> *) a.
Monad m =>
(a -> Bool) -> Trace m a -> Trace m a
filterTrace a -> Bool
f = ((LoggingContext, a) -> Bool) -> Trace m a -> Trace m a
forall (m :: * -> *) a.
Monad m =>
((LoggingContext, a) -> Bool) -> Trace m a -> Trace m a
Internal.filterTrace (a -> Bool
f (a -> Bool)
-> ((LoggingContext, a) -> a) -> (LoggingContext, a) -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (LoggingContext, a) -> a
forall a b. (a, b) -> b
snd)