Dlaczego Haskell nie ma abstrakcji lambda na poziomie typu?


22

Czy istnieją jakieś teoretyczne powody (na przykład, że sprawdzanie typu lub wnioskowanie o typach stałyby się nierozstrzygalne), lub praktyczne (zbyt trudne do prawidłowego wdrożenia)?

Obecnie możemy owijać w coś newtypepodobnego

newtype Pair a = Pair (a, a)

a następnie mieć Pair :: * -> *

ale nie możemy zrobić czegoś takiego λ(a:*). (a,a).

(Istnieje kilka języków, które je mają, na przykład Scala ma .)


4
Wybór jednego rodzaju systemu typów do użycia wyklucza inny rodzaj systemów typów, ponieważ całość musi być spójna. Poziom lambda na poziomie typu byłby bardzo dziwny w teorii kategorii ...
tp1

Odpowiedzi:


17

Wnioskowanie typu na podstawie lambda na poziomie typu wymagałoby unifikacji wyższego rzędu, co jest nierozstrzygalne. Jest to motywacja do ich niedopuszczenia. Ale podobnie jak w przypadku innych nierozstrzygalnych funkcji (takich jak wnioskowanie o typie dla GADT), może być możliwe wymaganie podpisów typów i zezwolenie na to. Nie jestem pewien, czy ktoś to zbadał.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.