An evaluator that tracks its work.
A non-determinist typechecker
A typechecker that builds derivations