You're welcome.

Continuing my experiments, I've added reciprocal units, unit products, degC, degF, Hz, rad, deg, deg/s, deg/s2, N, C, lx, Sv, kat.

I will have less time available, so feel free to look at the code and propose improvements, new unit combinations etc.

Here is how the units are structured. The principle is to define base units (meter, gram, second), then combine them as ratio or product. For example, m/s (speed) is a ratio and A.s (coulomb) is a product.

Then units can be combined again. (m/s)/s = m/s2 is the speed. kg.(m/s2) is the newton.

The way a unit is defined define operators that can be applied to it. For example, a speed (m/s) can be multiplied by a time (s) which gives a length (m).

It is needed to define explicitly an operator to combine units. For the speed, it is the "/" operator on meters and seconds.

For complicated units, such as the newton N, which is defined as kg.((m/s)/s), the predefined operators are to divide it by a mass or an acceleration. Not to multiply it by a second, for example, even though the unit is equivalent to (kg.(m/s))/s. If such operator is useful, then it would make sense to add it to the Dim unit.