Combining functions together can be an incredibly powerful technique. When one (or more) of these functions contains a bug, it can open up a rabbit-hole of debugging in order to find out where the problem is coming from. To combat this from happening, we'll create a utility function, `trace`, which will allow us to inspect the values being produced at different points in time as functions are being called.