Здравствуйте, vdimas, Вы писали:
EC>>Мы матчимся по разным значениям одного типа.
V>В функцию приходит значение размеченного объединения, которое суть пара: разметка + значение соответсвующего разметке типа. Объекты CLR представлены в куче аналогично, кстати. И насчёт "одного типа"... в случае алгебраических типов мы имеем 2 типа минимум: тип группы и хоть один тип участника группы.
Объясни мне тогда поведение GHCi:
*Main> :i MyNum
data MyNum = One | Two
*Main> :t One
One :: MyNum
*Main> :t Two
Two :: MyNum
V>Не хочешь посмотреть на описание размеченных объединений в CORBA IDL и заодно посмотреть, что генерируют компиляторы на эти описания? А потом мы возьмем эти 3 примера: IDL, CLR и Хаскель, и посмотрим, что там происходит в процессе динамического определения типа. 
Хочу посмотреть, покажи.