¿Hay algunas razones teóricas para eso (como que la verificación de tipos o la inferencia de tipos se volverían indecidibles), o razones prácticas (demasiado difíciles de implementar adecuadamente)?
Actualmente, podemos envolver cosas newtype
como
newtype Pair a = Pair (a, a)
y luego tener Pair :: * -> *
pero no podemos hacer algo como eso λ(a:*). (a,a)
.
(Hay algunos idiomas que los tienen, por ejemplo, Scala sí ).
haskell
abstraction
type-systems
lambda
Petr Pudlák
fuente
fuente
Respuestas:
La inferencia de tipos con lambdas de nivel de tipo requeriría una unificación de orden superior que es indecidible. Esta es la motivación para no permitirlos. Pero como ha sucedido con otras características indecidibles (como la inferencia de tipos para GADT), podría ser posible requerir firmas de tipo y permitirlo. No estoy seguro si eso ha sido investigado por alguien.
fuente