
Hmm. This suggestion has the potential to confuse the casual user even more. Consider
debug s x = trace (s++": "++show x++"\n") x f x = debug ("entered f") (... g y ...) g y = debug ("entered g") (...) main = ... f ...
With the current definition of 'trace', although the formatting is ugly, the user (correctly) sees that the evaluation of f is entered before g.
entered f: entered g: val_g_y val_f_x
The current implementation of Debug.Trace does indeed do this, but the behaviour can be altered by changing the buffering mode of stderr. Try it: import System.IO import Debug.Trace main = do hSetBuffering stderr (BlockBuffering Nothing) trace ("a" ++ trace "b" "") (return ()) AFAIK, it's been this way for a long time. Cheers, Simon
participants (1)
-
Simon Marlow