Re[23]: «Собаку съел»
От: samius Япония http://sams-tricks.blogspot.com
Дата: 25.01.17 21:41
Оценка: 1 (1)
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


_>>>Совершенно верно. И какую ты тут видишь разницу со случаем equal_to (заменяем его на f, а оператор равенства на xrmbrm)?

S>>никакой. Потому и заявляю, что equals_to — ad hoc, т.к. требует специализации чуть ли не для всех типов.

V>Абсолютно верно. Даже Вики подтверждает:

V>

V>В ряде исчислений, например, в теории квалифицированных типов, ad hoc полиморфизм рассматривается как частный случай параметрического.

О, если вики включить в перечень доверенных источников, то там можно найти еще и такое:

Язык С++ предоставляет подсистему шаблонов, использование которых внешне похоже на параметрический полиморфизм, но семантически реализуется сочетанием ad hoc-механизмов


V>"Унутре" ресолвера типов того же Хаскеля параметрический полиморфизм зачастую превращается в сочетание ad hoc + динамического полиморфизма (на основе таблицы ф-ий для классов типов). Но для программиста всё выглядит как чистейшей воды параметрический полиморфизм. А только эта т.з. для нас, программистов, и важна, ИМХО.


Вот, именно что выглядит "как". Есть даже такое:

Класс типов осуществляет диспетчеризацию статически, сводя параметрический>>> и ad hoc>>> полиморфизм в единую модель[12]. С точки зрения параметрического полиморфизма, класс типов имеет параметр (переменную типа), пробегающий множество типов. С точки зрения ad hoc полиморфизма, это множество не только дискретно, но и задано явным образом до уровня реализации. Проще говоря, сигнатура square :: Num a => a -> a означает, что функция параметрически полиморфна, но спектр типов её параметра ограничен лишь теми типами, что принадлежат к классу типов Num. Благодаря этому, функция типизируется единственным образом, несмотря на обращение к перегруженной функции из её тела.

т.е. если мы ограничиваем рассмотрение типов множеством типов некого класса (или множество типов, с определенным оператором сравнения, конструктором копирования и т.п.), то выходит что это как бы параметрический полиморфизм, несмотря на то, что оно ограничено явным образом. Но он параметрический лишь до той степени, пока не потребуется взять тип, не удовлетворяющий ограничению. В то время как кошерно параметрический код не требует от этого типа более ничего.

Т.е. я могу согласиться с тем, что equal_to параметрически полиморфна на множестве типов с определенным оператором сравнения, объединенном с множеством типов, для которых существует явная специализация equal_to. Но при этом ее ad hoc природу не спрятать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.