Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Category:

Haskell type classes и ad-hoc polymorphism

Являются ли haskell type classes примером ad-hoc polymorphism? В http://haskell.org/tutorial/classes.html написано, что являются. А мне кажется, что нет, так как присутствует явно обозначенный контракт. Вообще, какая-то мутная ситуация с определениями типов полиморфизма. Я считаю, что есть:
  • parametric polymorphism (Maybe в Хаскеле),
  • subtyping polymorphism (вместо типа можно подставить подтип; классический мейнстримовый runtime-полиморфизм С++ и Java),
  • ad-hoc polymorphism (перегруженные функции в С++, полиморфизм в Javascript).
Ad-hoc полиморфизм имеет тесное отношение к duck typing. Как только на все множество инстансов накладываются формальные ограничения, получается либо bound parametric polymorphism (type classes в Хаскеле, концепты в С++) либо subtyping polymorphism как частный случай bound parametric polymorphism. Шаблоны С++ без концептов - это смесь parametric polymorphism и ad-hoc. Например, std::list - полиморфен чисто параметрически по типу элемента (не накладывается никаких ограничений), и ad-hoc параметрически - по типу аллокатора (ограничения в виде необходимости поддерживать определенные методы накладываются, но явно не закреплены, duck typing).
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments