FeatherweightJava typechecking. The typechecker maps {@link fj.ast.Term terms} to types, which in FeatherweightJava are simply the {@link java.lang.String} names of classes. A well-typed program does not get the evaluator stuck unless a bad cast is executed.