Здравствуйте, Аноним, Вы писали:
А>Что-то много эмоций и мало логики.
А>Понятие полиморфизм означает применимость функции к разным типам.
А>Поскольку эрланг бестиповый язык, никакого полиморфизма в нем не может быть по определению.
Неправильно. Бестиповым языком можно назвать какой-нибудь Forth. А эрланг — это динамически типизированный язык. Если сомневаешься в наличии в нем типов, отсылаю к мануалу по Erlang.
А>Вот это
>> poly_function( { A, B } ) -> ...;
>> poly_function( [ A, B ] ) -> ...;
А>не полиморфная фунция.
Неправильно. Это — полиморфная функция.
А>Применить же сопоставление в одной и той же функции к спискам и кортежам в типизированном языке не получится.
Во-первых, в статически типизированном, конечно. А во-вторых — можно я попробую — вдруг все-таки получится?

Вот пример на очень статически типизированном Clean (система типов Милнера-Майкрофта):
::MyType = MyTuple Int Int | MyList [Int]
Funct:: MyType -> Int
Funct ( MyTuple a b ) = a
Funct ( MyList [ a, b ] ) = a
Вот и все. А ты боялся. В статически типизированном Хаскеле (и ML) будет то же самое.
Причем, практически для любых разумных сочетаний фактических типов эелементов А и В возможно определить такой алгебраический тип, что в ML и Хаскель будет то же самое, что и в эрланг (пусть тебя не пугает Int). И наоборот, в "бестиповом"

эрланге можно добавить такие же ограничения на типы элементов. А потом прогнать dyalizer, чтобы он
статически нашел ошибки типизации.
Впрочем, если не устраивает пример на Clean, я могу привести пример на С++,

где такое же сопоставление будет произведено одним простым виртуальным вызовом.