From d17fc9aab3c90189d6f40a867efc984efc893230 Mon Sep 17 00:00:00 2001 From: Stephen Diehl Date: Sat, 13 Aug 2016 16:14:15 -0400 Subject: [PATCH] traceShow and traceShowId for #16 --- docs/Index.md | 1 + src/Debug.hs | 38 +++++++++++++++++++++++++++----------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/docs/Index.md b/docs/Index.md index 4ac04b050..1b1b3dab7 100644 --- a/docs/Index.md +++ b/docs/Index.md @@ -29,3 +29,4 @@ Welcome to project documentation. - [Tuples](Tuples.md) - [Generics](Generics.md) - [Type Level Programming](TypeLevel.md) +- [Unsafe](Unsafe.md) diff --git a/src/Debug.hs b/src/Debug.hs index 42be4c443..647549b11 100644 --- a/src/Debug.hs +++ b/src/Debug.hs @@ -6,8 +6,10 @@ module Debug ( error, trace, traceM, + traceId, traceIO, traceShow, + traceShowId, traceShowM, notImplemented, ) where @@ -16,31 +18,45 @@ import Data.Text (Text, unpack) import Control.Monad (Monad, return) import qualified Base as P -import qualified Debug.Trace as T +import Show (Print, putStrLn) + +import System.IO.Unsafe (unsafePerformIO) + +{-# WARNING trace "'trace' remains in code" #-} +trace :: Print b => b -> a -> a +trace string expr = unsafePerformIO (do + putStrLn string + return expr) + +{-# WARNING traceIO "'traceIO' remains in code" #-} +traceIO :: Print b => b -> a -> P.IO a +traceIO string expr = do + putStrLn string + return expr {-# WARNING error "'error' remains in code" #-} error :: Text -> a error s = P.error (unpack s) -{-# WARNING trace "'trace' remains in code" #-} -trace :: Text -> a -> a -trace s = T.trace (unpack s) - {-# WARNING traceShow "'traceShow' remains in code" #-} traceShow :: P.Show a => a -> b -> b -traceShow a b = T.trace (P.show a) b +traceShow a b = trace (P.show a) b + +{-# WARNING traceShowId "'traceShowId' remains in code" #-} +traceShowId :: P.Show a => a -> a +traceShowId a = trace (P.show a) a {-# WARNING traceShowM "'traceShowM' remains in code" #-} traceShowM :: (P.Show a, Monad m) => a -> m () -traceShowM a = T.trace (P.show a) (return ()) +traceShowM a = trace (P.show a) (return ()) {-# WARNING traceM "'traceM' remains in code" #-} traceM :: (Monad m) => Text -> m () -traceM s = T.trace (unpack s) (return ()) +traceM s = trace (unpack s) (return ()) -{-# WARNING traceIO "'traceIO' remains in code" #-} -traceIO :: Text -> P.IO () -traceIO s = T.traceIO (unpack s) +{-# WARNING traceId "'traceM' remains in code" #-} +traceId :: Text -> Text +traceId s = trace s s notImplemented :: a notImplemented = P.error "Not implemented"