module Debug.Tracy
( makeTracy
, tracy
, tracyM
, ftracy
, ftracyM
, ftracyAp
) where
import Control.Monad
import Debug.Trace
import System.Environment
import System.IO.Unsafe
unsafeLookupEnv :: String -> Maybe String
unsafeLookupEnv envVar = unsafePerformIO (lookupEnv envVar)
makeTracy :: String -> (String -> Bool) -> String -> (a -> a)
makeTracy envVar p =
if maybe False p (unsafeLookupEnv envVar)
then trace
else \_msg -> id
tracy :: String -> a -> a
tracy = makeTracy "DEBUG" (=="TRUE")
tracyM :: (Monad m) => String -> m ()
tracyM x = tracy x $ return ()
ftracy :: Show a => (String -> String) -> a -> a
ftracy f x = tracy (f $ show x) x
ftracyAp :: (Show a, Monad m) => (String -> String) -> a -> m a
ftracyAp f x = ftracyM f x >> return x
ftracyM :: (Show a, Monad m) => (String -> String) -> a -> m ()
ftracyM f x = tracyM (f $ show x)