{-# LANGUAGE NamedFieldPuns #-}
module Cardano.Api.Trace.Debug
( traceIO'
, trace'
, pShow
)
where
import Control.Monad.IO.Class
import Data.Text.Lazy qualified as TL
import GHC.Stack
import Text.Pretty.Simple (pShow)
import Debug.Trace (traceIO, traceWith)
traceIO'
:: (HasCallStack, MonadIO m, Show a)
=> String
-> a
-> m ()
traceIO' :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, Show a) =>
String -> a -> m ()
traceIO' String
l a
a =
(HasCallStack => m ()) -> m ()
forall a. HasCallStack => (HasCallStack => a) -> a
withFrozenCallStack ((HasCallStack => m ()) -> m ()) -> (HasCallStack => m ()) -> m ()
forall a b. (a -> b) -> a -> b
$
IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (String -> IO ()) -> String -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IO ()
traceIO (String -> m ()) -> String -> m ()
forall a b. (a -> b) -> a -> b
$
String
"\r\n💎💎💎\r\n "
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> [(String, SrcLoc)] -> String
forall {a}. [(a, SrcLoc)] -> String
callsite (CallStack -> [(String, SrcLoc)]
getCallStack CallStack
HasCallStack => CallStack
callStack)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"\r\n📜 "
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
l
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
":\r\n"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
TL.unpack (a -> Text
forall a. Show a => a -> Text
pShow a
a)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"\r\n"
where
callsite :: [(a, SrcLoc)] -> String
callsite ((a
_, SrcLoc{String
srcLocFile :: String
srcLocFile :: SrcLoc -> String
srcLocFile, Int
srcLocStartLine :: Int
srcLocStartLine :: SrcLoc -> Int
srcLocStartLine, Int
srcLocStartCol :: Int
srcLocStartCol :: SrcLoc -> Int
srcLocStartCol}) : [(a, SrcLoc)]
_) =
[String] -> String
forall a. Monoid a => [a] -> a
mconcat [String
srcLocFile, String
":", Int -> String
forall a. Show a => a -> String
show Int
srcLocStartLine, String
":", Int -> String
forall a. Show a => a -> String
show Int
srcLocStartCol]
callsite [(a, SrcLoc)]
_ = String
""
{-# DEPRECATED traceIO' "traceIO' left in the code" #-}
trace'
:: Show a
=> String
-> a
-> a
trace' :: forall a. Show a => String -> a -> a
trace' String
l =
(a -> String) -> a -> a
forall a. (a -> String) -> a -> a
traceWith
(\a
x -> String
"📜 " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
l String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
":\r\n" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
TL.unpack (a -> Text
forall a. Show a => a -> Text
pShow a
x))
{-# DEPRECATED trace' "trace' left in the code" #-}