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 .)
haskell
abstraction
type-systems
lambda
Petr Pudlák
fonte
fonte
Respostas:
A inferência de tipo com lambdas no nível de tipo exigiria uma unificação de ordem superior, que é indecidível. Essa é a motivação para impedi-los. Mas, como aconteceu com outros recursos indecidíveis (como inferência de tipo para GADTs), pode ser possível exigir assinaturas de tipo e permitir isso. Não tenho certeza se isso foi investigado por alguém.
fonte