@lambda_regrin предлагаю почитать спекую любого нормального языка, где есть хоть какие-то параметрические типы и есть банальное наследование подтипов. И то и другое на коленке делается без особого труда. Алгебраические в тривиальном случае реализуемы через наследование. Итого искомый результат. Для полного кайфа надо будет только вариантность докрутить в чекере потом, но для начала ослабив её можно просто кидаться рантаймовыми ошибками в краевых случаях.