projects
/
ghc-base.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add tests from testsuite/tests/h98
[ghc-base.git]
/
Debug
/
Trace.hs
diff --git
a/Debug/Trace.hs
b/Debug/Trace.hs
index
5bc7128
..
ebacb6c
100644
(file)
--- a/
Debug/Trace.hs
+++ b/
Debug/Trace.hs
@@
-1,3
+1,5
@@
+{-# LANGUAGE CPP, ForeignFunctionInterface #-}
+
-----------------------------------------------------------------------------
-- |
-- Module : Debug.Trace
-----------------------------------------------------------------------------
-- |
-- Module : Debug.Trace
@@
-13,9
+15,10
@@
-----------------------------------------------------------------------------
module Debug.Trace (
-----------------------------------------------------------------------------
module Debug.Trace (
- -- * Tracing
- putTraceMsg, -- :: String -> IO ()
- trace -- :: String -> a -> a
+ -- * Tracing
+ putTraceMsg, -- :: String -> IO ()
+ trace, -- :: String -> a -> a
+ traceShow
) where
import Prelude
) where
import Prelude
@@
-23,23
+26,27
@@
import System.IO.Unsafe
#ifdef __GLASGOW_HASKELL__
import Foreign.C.String
#ifdef __GLASGOW_HASKELL__
import Foreign.C.String
+#else
+import System.IO (hPutStrLn,stderr)
#endif
-- | 'putTraceMsg' function outputs the trace message from IO monad.
#endif
-- | 'putTraceMsg' function outputs the trace message from IO monad.
--- Usually the output stream is 'stderr' but if the function is called
+-- Usually the output stream is 'System.IO.stderr' but if the function is called
-- from Windows GUI application then the output will be directed to the Windows
-- debug console.
putTraceMsg :: String -> IO ()
putTraceMsg msg = do
#ifndef __GLASGOW_HASKELL__
-- from Windows GUI application then the output will be directed to the Windows
-- debug console.
putTraceMsg :: String -> IO ()
putTraceMsg msg = do
#ifndef __GLASGOW_HASKELL__
- hPutStr handle msg
- hPutChar handle '\n'
+ hPutStrLn stderr msg
#else
withCString "%s\n" $ \cfmt ->
withCString msg $ \cmsg ->
debugBelch cfmt cmsg
#else
withCString "%s\n" $ \cfmt ->
withCString msg $ \cmsg ->
debugBelch cfmt cmsg
-foreign import ccall unsafe debugBelch :: CString -> CString -> IO ()
+-- don't use debugBelch() directly, because we cannot call varargs functions
+-- using the FFI.
+foreign import ccall unsafe "HsBase.h debugBelch2"
+ debugBelch :: CString -> CString -> IO ()
#endif
{-# NOINLINE trace #-}
#endif
{-# NOINLINE trace #-}
@@
-55,3
+62,11
@@
trace :: String -> a -> a
trace string expr = unsafePerformIO $ do
putTraceMsg string
return expr
trace string expr = unsafePerformIO $ do
putTraceMsg string
return expr
+
+{-|
+Like 'trace', but uses 'show' on the argument to convert it to a 'String'.
+
+> traceShow = trace . show
+-}
+traceShow :: (Show a) => a -> b -> b
+traceShow = trace . show