Какие типы полиморфизма поддерживаются в Haskell? - PullRequest
3 голосов
/ 27 мая 2019

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

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

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

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

Похоже, основные два:

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

1 Ответ

11 голосов
/ 27 мая 2019

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

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

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

Например,из бумаги полиморфизма легкомыслия:

Теперь мы можем представить основную идею статьи: заменить суб-сортировку на добрый полиморфизм.

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

Сначала вы можете подумать, что нам нужен подтип, но вместо этого мы обратимся к полиморфизму

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

Отсутствие подтипов - это осознанный выбор в нашем дизайне

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

Когда вы хотите использовать подтип, используйте вместо этого полиморфизм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...