Skip to content

Debugging herald should be printed before forcing SDoc

When I am debugging panics or infinite loops related laziness issues (e.g., lazy interface checking), I've noticed that sometimes a debugging trace can change the strictness of a function, causing us to tag a thunk too early.

Unfortunately, GHC makes it a bit difficult to tell that it's the debug trace's fault. Specifically, if the bad trace has the form traceTc "foo" someBadSDoc, we attempt to evaluate someBadSDoc before we start printing any output. That's too bad: we should FIRST output foo, and then force and print the rest of the SDoc.

Internally, traceTc's herald is implemented by catting the herald into the SDoc, so I am not sure what the best way of getting things to be lazier is. I don't think SDoc can be made to stream, so we might have to do something a little nasty like split the trace into two internal trace calls.

Trac metadata
Trac field Value
Version 8.0.1
Type Task
TypeOfFailure OtherFailure
Priority low
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information