Ci sono alcuni motivi teorici per questo (come il controllo del tipo o l'inferenza del tipo diventerebbe indecidibile), o ragioni pratiche (troppo difficili da implementare correttamente)?
Al momento possiamo raggruppare le cose in newtype
come
newtype Pair a = Pair (a, a)
e quindi avere Pair :: * -> *
ma non possiamo fare qualcosa come λ(a:*). (a,a)
.
(Ci sono alcune lingue che li hanno, ad esempio Scala .)