MetaScheme, or untyped MetaOCaml Meta-programming in Scheme with an arbitrary number of stages and cross-stage persistence. Or, why bracket is not a quasiquote.
Finally Tagless, Partially Evaluated: Tagless Staged Interpreters for Simpler Typed Languages
on a new web page on typed tagless interpretations, typechecking, staging, and dependent types