Nice to meet you, GHC Developers!
I'm new to contributing to GHC.

Today let me suggest new APIs of the Debug.Trace module, named:
  • taggedTraceShowId :: Show a => String -> a -> a
  • taggedTraceWith :: (a -> String) -> String -> a -> a
These are inspired by Elm's Debug.log function.
The prefix "tagged" is named after its argument.

I mean, these new APIs prepend a string as a tag to the output by traceShowId etc.
It helps us recognize what the printed values stand for.
I frequently want such functions and write them manually or copy-and-paste from the Debug.TraceUtils.
I'm tired of that. That's why I made this suggestion.

Comparison with the existing solution
  • Debug.TraceUtils:
    • Essentially, this suggestion is to add APIs already implemented by TraceUtils.
    • As the document of TraceUtils suggests, we can copy and paste the functions from its source, but it's still tiresome.
  • Combine Debug.Trace.traceShowId with Debug.Trace.trace:
    • e.g. trace "Tag" $ traceShowId x
    • A bit hard to type.
    • trace always prints a newline, which makes it difficult to tell the tags from the printed value.
After receiving some feedback here, I'm going to submit to https://github.com/ghc-proposals/ghc-proposals
Thanks in advance!

--