Good catch!

You have to implement `run` as part of the semantics. I'm afraid I've seen it's type signature vary from implementation to implementation, I'm still trying to wrap my head around how to make a type class for it. I will update this when I figure it out.

However, `run` shouldn't be complicated. If you grasping for it, Oleg Kiselyov implements it near the top of page 27 of his lecture notes [Typed Tagless Final Interpreters (2012)]( He gives his implementation of `interpret` at the bottom.


As an aside, I am still trying to figure out your puzzle. Can I have a hint? Is there a page in Fong and Spivak I should look at?