Write or trace Haskell definitions for simple functions that operate on lists, trees, numbers, etc.
Examples with higher-order functions: map, fold, etc.
Give a derivation tree for typing example expressions.
Write a type checker for a simple language
Decompose expressions using evaluation contexts
Write an interpreter for a simple language with runtime checks (defensive)
Write an interpreter for a simple language without runtime checks (trustful)
Closures, environments, and stores.
Understand abstract machines
Do simple proofs by induction on numbers
Proofs by induction on the structure of expressions
Proofs by induction on type derivation
Read (not write) a simple Twelf specification
Trace some simple bytecode sequences
Explain how to verify some simple property of bytecodes