The degree of type checking that the system will perform at compile time is left open but the more the better. The optimal situation is the one where a program which was accepted by the compiler cannot produce any run-time type errors. The amount of type inferencing is also left open to the system designer: the more the better, the ideal situation is the one in which only the base types have to be declared and the system infers the temporary types.