Какие типы полиморфизма поддерживаются в Haskell?

Читая определение полиморфизм в Википедии, у меня возникает вопрос:

Какие типы полиморфизма поддерживаются в Haskell, а какие нет?

Похоже, Википедия не содержит описания некоторых типов полиморфизма, таких как Левитивный полиморфизм, которые являются новыми для меня и поддерживаются в Haskell.

Мне интересно иметь расширенный список Хаскелл Полиморфизм с примерами для более глубокого изучения.

Вроде основных два:

  • Параметрический полиморфизм
  • Специальный полиморфизм

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

Joseph Sible-Reinstate Monica 27.05.2019 16:33

@JosephSible Я уважаю ваш голос. Но ты не убедил меня в том, насколько велик список вещей, которые нужно объяснить.

mkUltra 27.05.2019 16:51

Причины, по которым я спрашиваю, две: Чтобы глубоко изучить Haskell. Кроме того, я ожидаю аналогичный вопрос на техническом интервью.

mkUltra 27.05.2019 17:04

Я проголосовал, потому что, вероятно, есть довольно короткий и определенный ответ на этот вопрос, по крайней мере, для конкретной версии GHC. Полиморфизм в целом является довольно абстрактным понятием, но должен существовать конечный список языковых возможностей, реализованных в GHC, которые допускают ту или иную форму полиморфизма, и это конкретный вопрос факта.

user11228628 27.05.2019 18:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
4
545
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть как минимум четыре вещи, которые можно считать полиморфизмом в текущем Haskell:

Есть еще два типа полиморфизма, которые мощь будут представлены в будущих версиях Haskell:

Можно спросить, зачем весь этот арсенал полиморфизмов? Кажется, в Haskell существует общий принцип проектирования, согласно которому всякий раз, когда какая-то проблема может быть решена с помощью полиморфизма или подтипа, следует отдавать предпочтение полиморфизму.

Например, из статьи о легкомысленном полиморфизме:

We can now present the main idea of the paper: replace sub-kinding with kind polymorphism.

Из статьи, посвященной полиморфизму совместимости:

At first you might think that we need subtyping, but instead we turn to polymorphism

Из линейной бумаги Haskell:

The lack of subtyping is a deliberate choice in our design

Сам Саймон Пейтон Джонс указывает на 47:00 в этот разговор.

Whenever you want to use subtyping, use polymorphism instead.

Спасибо за ваш ответ. Могу ли я сказать, что полиморфизм более высокого ранга — это частный случай параметрического полиморфизма?

mkUltra 28.05.2019 08:23

Можно возразить, что подтипирование — это еще один вид полиморфизма. На самом деле подтипы поддерживаются в Haskell с экзистенциальными типами, но их следует использовать с крайней осторожностью.

n. 1.8e9-where's-my-share m. 28.05.2019 08:43

Полиморфизм более высокого ранга @mkUltra позволяет использовать параметрический/специальный полиморфизм внутри функций, передаваемых в качестве аргументов функциям более высокого порядка, что не включено по умолчанию downloads.haskell.org/~ghc/latest/docs/html/users_guide/…kseo.github.io/posts/2016-12-27-higher-rank-polymorphism.htm‌​l, а также позволяет использовать типы более высокого ранга downloads.haskell.org/~ghc/latest/docs/html/users_guide/…

danidiaz 28.05.2019 21:29

Другие вопросы по теме