Note that type-checking also happens at run time, at least in strongly typed languages. It is important in OO systems, to see if objects can be assigned to statically-typed variables. It is important in dynamically-typed systems like LISP, to see if any given operation is possible, or if things should break now.