Por que Haskell não possui abstrações lambda no nível de tipo?


22

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 newtypecomo

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:

Respostas:


17

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.