One idea I've had for debugging in a pure language would be to back-trace the computation of a value.
For example if you're looking in the reactor at a value, while debugging it could be annotated with the actual function call that produced it. So you could expand that value into a function call ... and the look at its arguments and possibly expand one or more of them to work your back to where there might have been a problem. It wouldn't have to run in this mode all the time ... it should be possible to "re-run" the last frame in this mode to yield these annotated values instead of the usual vanilla values.