Здравствуйте, vdimas, Вы писали:
V>Конструкторы алгебраического типа конструируют экземпляры этого же алгебраического типа (и разумеется одного, что за нелепый вопрос). Но сам алгебраический тип придуман как обёртка для других типов,
С этим согласен полностью. V>с тем, чтобы одна переменная (алгебраического типа) могла хранить значения различных целевых типов.
Это неверно. Переменная имеет один и тот же тип, независимо от того с помощью какого конструктора ты создал значение.
Да, ты можешь упаковать значения разных типов, но в результате упаковки получаются значения одного типа, что и подтвержается GHCi.
V>Сам по себе алгебраический тип используется только в том самом вырожденном случае, когда он используется в качестве перечисления. Во всех остальных случаях — это обёртка для других типов.
Продемонстрируй эти другие типы с помощью Hugs.
V>Насчёт разметки — это не дикое, это сущность размеченных объединений, я лишь проводил аналогию с объектами CLR, которые тоже содержат эту "разметку" в виде хендла типа.
Это всё верно, но деталь реализации.
V>Динамическое приведение типов в CLR (не преобразование, а именно приведение без изменения значения) — суть рантайм-тест этой "разметки", матч по алгебраическим типам в хаскеле — аналогично.
С этим никто и не спорит.
Вообще согласен, дискуссию пора сворачивать, не удаётся мне донести разницу между абстракцией и одной из возможных её реализаций.