|
|
- {-# LANGUAGE CPP #-}
- {-# LANGUAGE ConstraintKinds #-}
- {-# LANGUAGE KindSignatures #-}
- {-# LANGUAGE BangPatterns #-}
- #undef RELEASE
- module Debug where
-
- import qualified Debug.Trace as D
-
- #if defined(RELEASE)
- import GHC.Exts
- #endif
-
- import GHC.Stack
- import Prettyprinter
- import qualified Data.Text.Lazy as T
- import Data.Text.Prettyprint.Doc.Render.Text (renderLazy)
-
- traceDoc :: Doc a -> b -> b
-
- #if defined(RELEASE)
- type DebugCallStack = (() :: Constraint)
- traceDoc !_ v = v
- #else
- type DebugCallStack = HasCallStack
- traceDoc x = D.trace (T.unpack (renderLazy (layoutPretty defaultLayoutOptions x)))
- #endif
-
- trace :: Pretty a => a -> b -> b
- trace x = traceDoc (pretty x)
-
- traceWith :: Pretty a => String -> a -> b -> b
- traceWith s x = traceDoc (pretty s <+> pretty x)
-
- traceId :: Pretty a => a -> a
- traceId x = traceDoc (pretty x) x
-
- traceWithId :: Pretty a => String -> a -> a
- traceWithId s x = traceWith s x x
-
- traceDocM :: (Applicative m) => Doc a -> m ()
- traceDocM x = traceDoc x (pure ())
-
- traceM :: (Applicative m, Pretty a) => a -> m ()
- traceM = traceDocM . pretty
|