{-| Drop-in replacements for the event tracing functions in "Debug.Trace" but are faster when user tracing is disabled. -} module Debug.Trace.String ( traceEvent , traceEventIO , traceMarker , traceMarkerIO ) where import Control.Monad import qualified Debug.Trace as Base import Debug.Trace.Flags (userTracingEnabled) -- | Drop-in replacement for 'Debug.Trace.traceEvent' but is more efficient -- if user tracing in eventlog is disabled. -- -- Note that this function doesn't evaluate the 'String' if user tracing -- in eventlog is disabled. -- -- The input should be shorter than \(2^{16}\) bytes. Otherwise the RTS -- generates a broken eventlog. traceEvent :: String -> a -> a traceEvent :: String -> a -> a traceEvent String message a a | Bool userTracingEnabled = String -> a -> a forall a. String -> a -> a Base.traceEvent String message a a | Bool otherwise = a a -- | Drop-in replacement for 'Debug.Trace.traceEventIO' but is more efficient -- if user tracing in eventlog is disabled. -- -- Note that this function doesn't evaluate the 'String' if user tracing -- in eventlog is disabled. -- -- The input should be shorter than \(2^{16}\) bytes. Otherwise the RTS -- generates a broken eventlog. traceEventIO :: String -> IO () traceEventIO :: String -> IO () traceEventIO String message = Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () when Bool userTracingEnabled (IO () -> IO ()) -> IO () -> IO () forall a b. (a -> b) -> a -> b $ String -> IO () Base.traceEventIO String message -- | Drop-in replacement for 'Debug.Trace.traceMarker' but is more efficient -- if user tracing in eventlog is disabled. -- -- Note that this function doesn't evaluate the 'String' if user tracing -- in eventlog is disabled. -- -- The input should be shorter than \(2^{16}\) bytes. Otherwise the RTS -- generates a broken eventlog. traceMarker :: String -> a -> a traceMarker :: String -> a -> a traceMarker String message a a | Bool userTracingEnabled = String -> a -> a forall a. String -> a -> a Base.traceMarker String message a a | Bool otherwise = a a -- | Drop-in replacement for 'Debug.Trace.traceMarkerIO' but is more efficient -- if user tracing in eventlog is disabled. -- -- Note that this function doesn't evaluate the 'String' if user tracing -- in eventlog is disabled. -- -- The input should be shorter than \(2^{16}\) bytes. Otherwise the RTS -- generates a broken eventlog. traceMarkerIO :: String -> IO () traceMarkerIO :: String -> IO () traceMarkerIO String message = Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () when Bool userTracingEnabled (IO () -> IO ()) -> IO () -> IO () forall a b. (a -> b) -> a -> b $ String -> IO () Base.traceMarkerIO String message