type inference and type checking are different