https://wiki.haskell.org/Polymorphism говорит
Специальный полиморфизм означает, что значение может принимать любой из нескольких типов, поскольку ему или используемому им значению присвоено отдельное определение для каждого из этих типов. Например, оператор +, по сути, делает что-то совершенно другое при применении к значениям с плавающей запятой по сравнению с применением к целым числам — в Python его можно применять даже к строкам. Большинство языков поддерживают, по крайней мере, некоторый специальный полиморфизм, но в таких языках, как C, он ограничен только встроенными функциями и типами. Другие языки, такие как C++, позволяют программистам предоставлять свои собственные перегрузки, предоставляя несколько определений одной функции, чтобы устранить неоднозначность по типам аргументов. В Haskell это достигается с помощью системы классов типов и экземпляров классов.
Несмотря на схожесть названий, классы типов в Haskell сильно отличаются от классов большинства объектно-ориентированных языков. У них больше общего с интерфейсами в том, что они определяют ряд методов или значений по сигнатуре их типа, которые должны быть реализованы в объявлении экземпляра.
Означает ли это, что классы типов — это способ достижения перегрузки, то есть специального полиморфизма?
К какому типу полиморфизма относится интерфейс в объектно-ориентированных языках (например, Java, C#), специальному полиморфизму (то есть перегрузке) или полиморфизму подтипа?
Поскольку класс типов похож на интерфейс, является ли интерфейс способом достижения перегрузки, т.е. специального полиморфизма, как класс типов?
Похож ли интерфейс на базовый класс, так является ли интерфейс способом достижения полиморфизма подтипов, как наследование классов?
Спасибо.
(forall a. a -> a) ≤ (Int -> Int)
. - person dfeuer   schedule 22.07.2019