Intro to MetaML
   The ML Programming language
      functions
      recursion
      datatypes
      polymorphism
      references and assignments
   Staging Annotations
   Meta-programs vs object-programs
   Multiple stages
   code as first class objects
   static scoping of object variables
   alpha-renaming of bound variables
   cross stage persistence
   the power example
   the membership example
   Things that can go wrong with staged programs
      staging errors
      bad use of run

Staging as fine control of evaluation order
   faking laziness with staging
   example: staging pattern matching


Staging an Interpreter
   simple interpretor
   binding time improvements
      split the env
      pull looping out of while
   the trick!
   The 7 steps to implementing a DSL

Early Uses of staging
   compilers
   Synthesis Kernel
   eval function of Lisp
   Lisp macros

Partial Evaluation
   Online vs Off line
   Off line as automatic placement of staging annotations
   binding time analysis
   CMix examples

Monads
   Computation as monads
   staging as monadic computation

Semantics of staging
   An interpreter for a staged language
      dynamic renaimg of object variables
      recursive use of run
   meta-computations and staging as monads
      Moggis's paper

Implementing staging
   as an interpeter
   compiling staging
   The staged Abstract Machine

Other approaches to staging
   Peter Lee's stuff
   'C
   dynamic compilation project

Type systems for staging
   modal type systems
   metaML and AIM
   programs that can't be typed. i.e. interpeter for a typed lambda calculus
      walid's tag eliminations
      dependently typed programs
   types and effects like assignment

Staging as a mechanism for visualizing computation
   monad transformers
   combinator parsers
   aspect oriented programming