id summary reporter owner description type status priority milestone component version resolution keywords cc os architecture failure testcase blockedby blocking related differential
7626 Add common utility variants of trace to Debug.Trace chrisseaton "As discussed on the libraries list.
http://www.haskell.org/pipermail/libraries/2013-January/019319.html
'traceId' traces a value, and then returns that same value. This avoids the common case of 'trace a a'.
{{{
traceId :: String -> String
traceId a = trace a a
}}}
'traceM' runs 'trace' and returns unit in an arbitrary monad. This is useful for writing traces in do-notation, as each can sit on their own line.
{{{
traceM :: (Monad m) => String -> m ()
traceM string = trace string $ return ()
}}}
For example:
{{{
... = do
x a -> a
traceShowId a = trace (show a) a
}}}
{{{
traceShowM :: (Show a, Monad m) => a -> m ()
traceShowM = traceM . show
}}}
Advantages:
I use these functions in my code all the time. When I discussed it on the libraries list there were several enthusiastic +1s of people doing the same.
Disadvantages:
The documentation in the patch makes it clear that traceM does not actually add a trace action to the monad you're using, which is a potential point of confusion (http://www.haskell.org/pipermail/libraries/2013-January/019322.html). I had originally suggested that 'traceIO == traceM', but it turns out this is not so.
Henning Thielemann suggested that 'traceM' was better achieved with directly using 'trace' and 'printf' (http://www.haskell.org/pipermail/libraries/2013-January/019320.html). Of course, any function can be replaced with its RHS, and whether or not the user uses 'show' or 'printf' or whatever is orthogonal.
I haven't written any tests, as it's all output generating code, so I'm really not sure how that's tested in GHC - sorry.
Status of patch:
Applies against base 3b51b741f45d4d85e79b2128d00479ce230f72f2 and compiles with GHC 388e1e825f79f2d16536fc583a48e5ce9c191b06. I've run a full GHC compile cycle with it without problem. Includes documentation.
" feature request closed normal 7.8.1 libraries/base 7.6.1 fixed trace malaquias@… Unknown/Multiple Unknown/Multiple None/Unknown