Quais são as possíveis implementações das classes de tipo de Haskell e quais são suas (des) vantagens?

9

Até onde eu sei, uma função Haskell com restrições de classes de tipo é compilada internamente para uma função com argumentos adicionais que recebem dicionários com as implementações necessárias de cada classe de tipo específica.

  • Existem outras possibilidades de compilação de classes de tipo?
  • Em caso afirmativo, quais são suas (des) vantagens?
  • E quais compiladores os usam?
Petr Pudlák
fonte
4
Há bastante literatura sobre o assunto. Talvez comece com Implementing Type Classes de J. Peterson, M. Jones. Você também pode olhar para Classes de tipos como objetos e implícitos de Oliveira et al., Que fala sobre isso no contexto de Scala, mas tem uma seção bastante ampla sobre trabalhos relacionados.
Martin Berger
11
Encontrei um link para o artigo: Implementando classes de tipo. John Peterson e Mark P. Jones .
Petr Pudlák
11
@MartinBerger faz disso uma resposta?
Suresh Venkat
O outro pode ser encontrado aqui .
Martin Berger
@Suresh Venkat, eu não queria responder, porque não tenho certeza de que essas duas sejam as melhores ou até boas respostas. Já faz um tempo desde que eu analisei implementações de linguagens funcionais. Talvez alguns dos bods PF residentes podem gritei.
Martin Berger

Respostas:

8

O JHC usa uma abordagem diferente. A linguagem intermediária do compilador é um cálculo lambda de tipo dependente, em que não há distinção entre tipos e valores. Portanto, o JHC pode executar uma análise de caso no parâmetro de tipo de uma função e chamar diretamente a função sobrecarregada correta.

O site do JHC detalha a implementação, bem como suas vantagens sobre a implementação padrão de aprovação de dicionários.

Dominic Mulligan
fonte