История изменений
Исправление alysnix, (текущая версия) :
я в ваших растах не разбираюсь, а enum для размеченного обьединения я впервые увидел в нем.
и тут дело не в общих абстракциях, а в реальной эквивалентости типов. потому что физическое представление будет содержать актуальный номер варианта, и на физ уровне один и тот же вариант в якобы коммутирующих перестановках в типе сумме будет разным.
псевдокод, записываем int в «тип сумму».
(int, float) <- int
(float, int) <- int
в первом случае тег варианта = 0, во втором = 1.
то есть либо надо говорить, что это типы разные, либо сравнивать такие типы специальным образом, пересчитывая теги.
итак что отвечает раст(или кто-то там) на вопрос - являются ли эти типы эквивалентными, то есть приводимыми по умолчанию. для меня вот очевидно, что подставить значение первого типа во второй - это систему сломать. у них разные теги внутри
Исходная версия alysnix, :
я в ваших растах не разбираюсь, а enum для размеченного обьединения я впервые увидел в нем.
и тут дело не в общих абстракциях, а в реальной эквивалентости типов. потому что физическое представление будет содержать актуальный номер варианта, и на физ уровне один и тот же вариант в якобы коммутирующих перестановках в типе сумме будет разным.
псевдокод, записываем int в «тип сумму». (int, float) <- int (float, int) <- int
в первом случае тег варианта = 0, во втором = 1.
то есть либо надо говорить, что это типы разные, либо сравнивать такие типы специальным образом, пересчитывая теги.
итак что отвечает раст(или кто-то там) на вопрос - являются ли эти типы эквивалентными, то есть приводимыми по умолчанию. для меня вот очевидно, что подставить значение первого типа во второй - это систему сломать. у них разные теги внутри