module Hix.Trace where

import Distribution.Pretty (Pretty)
import GHC.Stack (callStack)
import System.IO.Unsafe (unsafePerformIO)

import Hix.Pretty (showP)

trp ::
   b a .
  Pretty b =>
  HasCallStack =>
  b ->
  a ->
  a
trp :: forall b a. (Pretty b, HasCallStack) => b -> a -> a
trp b
b a
a =
  IO a -> a
forall a. IO a -> a
unsafePerformIO (a
a a -> IO () -> IO a
forall a b. a -> IO b -> IO a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ SrcLoc -> Text -> IO ()
debugPrint (CallStack -> SrcLoc
srcLoc CallStack
HasCallStack => CallStack
callStack) (b -> Text
forall b a. (Pretty a, IsString b) => a -> b
showP b
b))

trpi ::
  Pretty a =>
  HasCallStack =>
  a ->
  a
trpi :: forall a. (Pretty a, HasCallStack) => a -> a
trpi a
a =
  IO a -> a
forall a. IO a -> a
unsafePerformIO (a
a a -> IO () -> IO a
forall a b. a -> IO b -> IO a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ SrcLoc -> Text -> IO ()
debugPrint (CallStack -> SrcLoc
srcLoc CallStack
HasCallStack => CallStack
callStack) (a -> Text
forall b a. (Pretty a, IsString b) => a -> b
showP a
a))