typechecker and interpreter