¿Por qué Haskell no tiene abstracciones lambda de nivel de tipo?

22

¿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 newtypecomo

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í ).

Petr Pudlák
fuente
44
Elegir un tipo de sistema de tipos en uso excluye el otro tipo de sistemas de tipos, ya que todo debe ser coherente. El nivel de tipo lambda sería muy extraño en la teoría de categorías ...
tp1
1
stackoverflow.com/questions/4922560/… también está relacionado.
Edward Z. Yang

Respuestas:

17

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.

augustss
fuente