diff --git a/src/Juvix/Prelude.hs b/src/Juvix/Prelude.hs index 6371699dcd..340e2a6e7d 100644 --- a/src/Juvix/Prelude.hs +++ b/src/Juvix/Prelude.hs @@ -1,5 +1,6 @@ module Juvix.Prelude ( module Juvix.Prelude.Base, + module Juvix.Prelude.Trace, module Juvix.Prelude.Error, module Juvix.Prelude.Files, module Juvix.Prelude.Lens, @@ -12,3 +13,4 @@ import Juvix.Prelude.Error import Juvix.Prelude.Files import Juvix.Prelude.Lens import Juvix.Prelude.Loc +import Juvix.Prelude.Trace diff --git a/src/Juvix/Prelude/Base.hs b/src/Juvix/Prelude/Base.hs index 6058f15f87..39ed9c8a0a 100644 --- a/src/Juvix/Prelude/Base.hs +++ b/src/Juvix/Prelude/Base.hs @@ -238,7 +238,7 @@ tableNestedInsert :: a -> HashMap k1 (HashMap k2 a) -> HashMap k1 (HashMap k2 a) -tableNestedInsert k1 k2 a = tableInsert (HashMap.singleton k2) (HashMap.insert k2) k1 a +tableNestedInsert k1 k2 = tableInsert (HashMap.singleton k2) (HashMap.insert k2) k1 -------------------------------------------------------------------------------- -- NonEmpty diff --git a/src/Juvix/Prelude/Trace.hs b/src/Juvix/Prelude/Trace.hs new file mode 100644 index 0000000000..01b7d565f1 --- /dev/null +++ b/src/Juvix/Prelude/Trace.hs @@ -0,0 +1,42 @@ +module Juvix.Prelude.Trace where + +import Data.Text qualified as Text +import Debug.Trace qualified as T +import GHC.IO (unsafePerformIO) +import Juvix.Prelude.Base + +setDebugMsg :: Text -> Text +setDebugMsg msg = "[debug] " <> fmsg <> "\n" + where + fmsg + | Text.null msg = "" + | otherwise = msg <> " :" + +traceLabel :: Text -> Text -> a -> a +traceLabel msg a = T.trace (unpack $ setDebugMsg msg <> a) +{-# WARNING traceLabel "Using traceLabel" #-} + +trace :: Text -> a -> a +trace = traceLabel "" +{-# WARNING trace "Using trace" #-} + +traceShow :: Show b => b -> b +traceShow b = traceLabel "" (pack . show $ b) b +{-# WARNING traceShow "Using traceShow" #-} + +traceToFile :: FilePath -> Text -> a -> a +traceToFile fpath t a = + traceLabel (pack ("[" <> fpath <> "]")) t $ + unsafePerformIO $ + do + writeFile fpath t + return a +{-# WARNING traceToFile "Using traceToFile" #-} + +traceToFile' :: Text -> a -> a +traceToFile' = traceToFile "./juvix.log" +{-# WARNING traceToFile' "Using traceToFile'" #-} + +traceToFileM :: (Applicative m) => FilePath -> Text -> a -> m () +traceToFileM fpath t a = pure (traceToFile fpath t a) $> () +{-# WARNING traceToFileM "Using traceFileM" #-}