Насколько я вижу, основываясь на нескольких экспериментах, единственное место, где компилятор использует тот факт, что kg = kilogram
в процессе упрощения, - это когда конечный тип не содержит единиц, то есть тип float<1>
.Во всех других случаях, которые я пробовал, он сохраняет и kg
, и kilogram
в типе блока.
Я подозреваю, что компилятор все еще знает, что тип 1.<kg/kilogram>
равен kg/kilogram
, но потому что этоэквивалентный 1
, он не отображает его - он показывает float
, а не float<1>
или float<kg/kilogram>
.
Нет необходимости замечать, что упрощение происходит, когда оно действительно необходимо - если вы попытаетесьсравнивая значение 1.<kg s / kilogram>
со значением 1.<s / 1>
, это хорошо напечатано:
let y = 1.<kg s / kilogram>
y = 1.<s/1>
У меня нет веских доказательств (например, ссылка на спецификацию), но я думаю, что только компиляторвыполняет упрощение, когда это действительно необходимо, но в остальном сохраняет аннотации модуля по мере их написания.