С классами типа Haskell почти кажется, что он позволяет ad hoc-полиморфизм, но его объявления функций кажутся параметрическим полиморфизмом. Я смешиваю свое понимание разных вещей?
Что такое стиль Haskell для полиморфизма?
Ответ 1
Действительно, Haskell поддерживает как параметрический полиморфизм (более высокий ранг), так и ad hoc (или ограниченный) полиморфизм. Параметрический полиморфизм в Haskell поддерживается через систему Hindley-Milner/System F. Ad hoc-полиморфизм поддерживается с помощью классов типов.
Для происхождения типов классов и специального полиморфизма см. документы Вадлера:
- Как сделать ad-hoc полиморфизм менее ad hoc, Филипп Вадлер и Стивен Блотт. 16-й симпозиум по принципам языков программирования, ACM Press, Остин, Техас, январь 1989 г.
Для возникновения различия между параметрическим и специальным полиморфизмом вы можете выкопать статьи Страхи,
- С. Strachey, Основные понятия в языках программирования. Лекционные заметки для Международной летней школы по компьютерному программированию, Копенгаген, август 1967 г.