Y a-t-il des raisons théoriques à cela (comme que la vérification de type ou l'inférence de type deviendrait indécidable) ou des raisons pratiques (trop difficiles à mettre en œuvre correctement)?
Actuellement, nous pouvons envelopper des choses newtype
comme
newtype Pair a = Pair (a, a)
puis avoir Pair :: * -> *
mais nous ne pouvons pas faire quelque chose comme ça λ(a:*). (a,a)
.
(Il existe certaines langues qui en ont, par exemple Scala .)