1 -----------------------------------------------------------------------------
3 -- Module : Debug.Trace
4 -- Copyright : (c) The University of Glasgow 2001
5 -- License : BSD-style (see the file libraries/base/LICENSE)
7 -- Maintainer : libraries@haskell.org
8 -- Stability : provisional
9 -- Portability : portable
11 -- The 'trace' function.
13 -----------------------------------------------------------------------------
17 trace -- :: String -> a -> a
21 import System.IO.Unsafe
24 #ifdef __GLASGOW_HASKELL__
33 #ifdef __GLASGOW_HASKELL__
34 {-# NOINLINE trace #-}
36 When called, 'trace' prints the string in its first argument to
37 standard error, before returning the second argument as its result.
38 The 'trace' function is not referentially transparent, and should only
39 be used for debugging, or for monitoring execution. Some
40 implementations of 'trace' may decorate the string that\'s output to
41 indicate that you\'re tracing.
43 trace :: String -> a -> a
44 trace string expr = unsafePerformIO $ do
47 fd <- withHandle_ "trace" stderr $ (return.haFD)
51 foreign import ccall "PostTraceHook" postTraceHook :: Int -> IO ()
55 trace :: String -> a -> a
56 trace str expr = unsafePerformIO $ do hPutStr stderr str; return expr