Type Inference for Procedural Programmers