Proposal: Debug.Trace.traceWith

Michael Sloan mgsloan at
Sat Feb 10 14:48:21 UTC 2018

I often define

tracer prefix x = trace (prefix ++ ": " ++ show x) x

A bit arbitrary with the choice of ": ", but quite convenient. The with
variant would be

tracerWith prefix f x = trace (prefix ++ ": " ++ show (f x)) x

On Feb 9, 2018 5:09 PM, "Kris Nuttycombe" <kris.nuttycombe at> wrote:

When using Debug.Trace for debugging, a very common operation is to prefer
to trace only some subset or function of an intermediate result. As a
consequence, I propose adding the following function to Debug.Trace:

traceWith :: (Show b) => (a -> b) -> a -> a
traceWith f a = trace (show $ f a) a

While it's trivial to define, I have found this to be one of the most
useful functions in my trace-based debugging toolkit, hence my proposal
that it be added to base. It generalizes `traceShowId` in a meaningful and
useful fashion.

As this is the first such proposal I've put forth, please let me know if
I'm doing anything wrong with it!


Kris Nuttycombe

Libraries mailing list
Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list