Type checking is done either against a literal value (number, string...)
or against the operator in case of an expression.
Sometimes it is not possible to infer only one type, for example
the value 'transparent' could either be a color or a string. This
is covered by the fact that all operators expect exactly one type
for their arguments.