Existem algumas razões teóricas para isso (como a verificação ou inferência de tipo se tornariam indecidíveis) ou razões práticas (muito difíceis de implementar adequadamente)?
Atualmente, podemos envolver coisas newtype
como
newtype Pair a = Pair (a, a)
e depois tem Pair :: * -> *
mas não podemos fazer algo assim λ(a:*). (a,a)
.
(Existem alguns idiomas que os possuem, por exemplo, Scala possui .)
4
A escolha de um tipo de sistema de tipos em uso exclui o outro tipo de sistemas de tipos, pois a coisa toda precisa ser consistente. O lambda no nível de tipo seria muito estranho na teoria das categorias ...
—
tp1:
stackoverflow.com/questions/4922560/… também está relacionado.
—
Edward Z. Yang