Typy statyczne, polimorfizm i specjalizacja

Kiedy po raz pierwszy dowiedziałem się o Haskell, bardzo szybko pokochałem polimorfizm parametryczny. To zachwycająco prosty pomysł, który działa zadziwiająco dobrze. Całość „jeśli się kompiluje, to zwykle działa poprawnie”, to głównie ze względu na polimorfizm parametryczny, IMHO.

Ale pewnego dnia coś mi przyszło do głowy. Umiem pisaćfoo jako funkcja polimorficzna. Ale kiedybar połączeniafoo, zrobi to z określonym zestawem typów argumentów. Albo jeślibar sam w sobie jest polimorficznyjego rozmówca przypisze określone typy. Przez indukcję wydaje się, że jeśli miałbyś wziąć jakiś ważny program Haskella i przeanalizowaćcała baza kodu, możesz statycznie określić typ każdej rzeczy w całym programie.

To w pewnym sensie trochę jak szablony C ++. Nie maczas pracy tylko polimorfizmczas kompilacji wielopostaciowość. Kompilator Haskell może wybrać generowanie oddzielnego kodu maszynowego dla każdego typu, w którym wywoływana jest każda funkcja polimorficzna. Większość kompilatorów Haskell nie, ale możesz je zaimplementować, jeśli chcesz.

Tylko jeśli zaczniesz dodawać rozszerzenia Haskell (ExistentialQuantification jest oczywisty) czy zaczynasz być realnyczas pracy polimorfizm, w którym masz wartości typu, którego nie można obliczyć statycznie.

Oh, tak, moje pytanie?

Czy powyższe stwierdzenia są rzeczywiście prawidłowe?

Czy jest powszechnie używanyimię dla tej nieruchomości?

questionAnswers(3)

yourAnswerToTheQuestion