This is the material used for my PHASE talk on tagless final. I added a few comments to the files that I didn't present.
src/Talk.scala - File created during the first part of the talk, goes over constructing the tagless final pattern.
src/Talk2.scala - File created during the second part of the talk, applies tagless final as an alternative to the free monad.
src/Addl/Help.scala - Contains the boolean expression language from the middle of the talk.
src/done/Done.scala - First part of the talk, finished beforehand.
src/done/Done2.scala - Second part of the talk, finished beforehand.
src/done/Done3.scala - Implemented an example of using an interpreter to convert the structure of a tagless final program.
src/done/Done4.scala - A different solution for structural conversion that leaves the interpretation more flexible. (see comments)
Finally Tagless, Partially Evaluated:
Tagless Staged Interpreters for Simpler Typed Languages
Please send question, corrections, ideas, solutions, etc. to:
Me: Dan Hunt