module Debug.Trace.Dump
( traceFile
, traceFileBSL
, traceFileText
, traceBSLSuffix
, traceTextSuffix
) where
import Control.Applicative (pure)
import qualified Data.ByteString.Lazy as BSL
import Data.Functor (($>), (<$>))
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import Data.Word (Word)
import Numeric (showHex)
import System.Directory (doesFileExist)
import System.IO.Unsafe (unsafePerformIO)
import System.Random (randomIO)
randHex :: IO String
randHex = ($"") . (showHex :: Word -> ShowS) <$> randomIO
traceBSLSuffix :: String
-> BSL.ByteString
-> a
-> a
traceBSLSuffix ext bytes x = unsafePerformIO $ do
fpBase <- randHex
let fp = fpBase ++ ext
check <- doesFileExist fp
if check
then pure $ traceBSLSuffix ext bytes x
else BSL.writeFile fp bytes $> x
traceTextSuffix :: String
-> T.Text
-> a
-> a
traceTextSuffix ext txt x = unsafePerformIO $ do
fpBase <- randHex
let fp = fpBase ++ ext
check <- doesFileExist fp
if check
then pure $ traceTextSuffix ext txt x
else TIO.writeFile fp txt $> x
traceFileBSL :: FilePath -> BSL.ByteString -> a -> a
traceFileBSL fp bytes x = unsafePerformIO $
BSL.writeFile fp bytes $> x
traceFileText :: FilePath -> T.Text -> a -> a
traceFileText fp txt x = unsafePerformIO $
TIO.writeFile fp txt $> x
traceFile :: FilePath -> String -> a -> a
traceFile fp str x = unsafePerformIO $
writeFile fp str $> x