This presentation takes the view that the typing for an expression (program fragment) may be obtained directly from the expression by applying rewriting rules. So the typing can be viewed as the result of evaluating the expression using a non-standard semantics. What are usually considered typings in other presentations are merely those typings which are fully evaluated. Thus, type inference can be seen as a kind of abstract evaluation. This idea is illustrated by examples for the lambda calculus for both simple types and intersection types. This gives a simpler and clearer explanation of how System I (a system of intersection types) works than earlier explanations.