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ś newtype
podobnego
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 .)