В текущем Haskell есть как минимум четыре вещи, которые могут считаться полиморфизмом:
Существует еще два типа полиморфизма, которые могут быть введены в будущих версиях Haskell:
Кто-то может спросить, почему весь этот набор полиморфизмов?Кажется, в Haskell существует общий принцип проектирования, согласно которому всякий раз, когда какая-либо проблема может быть решена с помощью подтипа или полиморфизма, полиморфизм должен быть предпочтительным .
Например,из бумаги полиморфизма легкомыслия:
Теперь мы можем представить основную идею статьи: заменить суб-сортировку на добрый полиморфизм.
Из бумаги, вводящей полиморфизм сопоставимости:
Сначала вы можете подумать, что нам нужен подтип, но вместо этого мы обратимся к полиморфизму
Из линейной бумаги на Haskell:
Отсутствие подтипов - это осознанный выбор в нашем дизайне
Саймон Пейтон Джонс сам говорит о 47: 00 в этом разговоре .
Когда вы хотите использовать подтип, используйте вместо этого полиморфизм.