Jakie są możliwe implementacje klas typów Haskell i jakie są ich (nie) zalety?

9

O ile mi wiadomo, funkcja Haskella z ograniczeniami klas typów jest wewnętrznie kompilowana do funkcji z dodatkowymi argumentami, które otrzymują słowniki z niezbędnymi implementacjami poszczególnych klas typów.

  • Czy istnieją inne możliwości kompilowania klas typów?
  • Jeśli tak, jakie są ich (nie) zalety?
  • A jakie kompilatory ich używają?
Petr Pudlák
źródło
4
Na ten temat jest sporo literatury. Może zacznij od implementacji klas typów J. Petersona, M. Jonesa. Możesz także spojrzeć na klasy typów jako obiekty i implikacje autorstwa Oliveiry i in., Która mówi o tym w kontekście Scali, ale ma dość dużą część na temat powiązanych prac.
Martin Berger,
1
Znalazłem link do artykułu: Implementowanie klas typów. John Peterson i Mark P. Jones .
Petr Pudlák,
1
@MartinBerger uczyni to odpowiedzią?
Suresh Venkat,
Drugi można znaleźć tutaj .
Martin Berger,
@Suresh Venkat, nie chciałem udzielić odpowiedzi, ponieważ nie jestem pewien, czy te dwie są najlepsze, a nawet dobre odpowiedzi. Minęło trochę czasu, odkąd spojrzałem na implementacje języków funkcjonalnych. Być może niektórzy mieszkańcy FP mogą się wtrącić.
Martin Berger

Odpowiedzi:

8

JHC stosuje inne podejście. Językiem pośrednim kompilatora jest rachunek lambda zależny od typu, w którym nie ma rozróżnienia między typami a wartościami. Dlatego JHC może przeprowadzić analizę przypadków na parametrze typu funkcji i bezpośrednio wywołać prawidłową funkcję przeciążoną.

JHC strona idzie do pewnej głębokości od implementacji, jak również jego zalet w stosunku do standardowej implementacji mijania słownika.

Dominic Mulligan
źródło