/usr/lib/hugs/packages/base/Debug/Trace.hs is in libhugs-base-bundled 98.200609.21-5.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | -----------------------------------------------------------------------------
-- |
-- Module : Debug.Trace
-- Copyright : (c) The University of Glasgow 2001
-- License : BSD-style (see the file libraries/base/LICENSE)
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
-- Portability : portable
--
-- The 'trace' function.
--
-----------------------------------------------------------------------------
module Debug.Trace (
-- * Tracing
putTraceMsg, -- :: String -> IO ()
trace -- :: String -> a -> a
) where
import Prelude
import System.IO.Unsafe
import System.IO (hPutStrLn,stderr)
-- | 'putTraceMsg' function outputs the trace message from IO monad.
-- 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
hPutStrLn stderr msg
{-# NOINLINE trace #-}
{-|
When called, 'trace' outputs the string in its first argument, before
returning the second argument as its result. The 'trace' function is not
referentially transparent, and should only be used for debugging, or for
monitoring execution. Some implementations of 'trace' may decorate the string
that\'s output to indicate that you\'re tracing. The function is implemented on
top of 'putTraceMsg'.
-}
trace :: String -> a -> a
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
|