[a]*[b][[...*c]]
where [a], [b], and [c] are all values
[a], [b], and [c] are numbers
returns the product of [a], [b], [c] in the most precise type that appears in the chain
mul(type[a], type[b], type[c]) is defined
returns a call of [a], [b], and [c] to mul
[a]*[b] is defined
evaluates [a]*[b] first, then evaluates the rest of the expression