Debugging Functional Programs By Interpretation