# Ideas for exam questions

## Haskell

Write or trace Haskell definitions for simple functions that operate
on lists, trees, numbers, etc.

Examples with higher-order functions: map, fold, etc.

## Types

Give a derivation tree for typing example expressions.

Write a type checker for a simple language

## Semantics

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

## Proofs

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

## Java Bytecode Language

Trace some simple bytecode sequences

Explain how to verify some simple property of bytecodes