Was sind mögliche Implementierungen von Haskells Typklassen und was sind ihre (Nachteile)?


9

Soweit ich weiß, wird eine Haskell-Funktion mit Einschränkungen für Typklassen intern zu einer Funktion mit zusätzlichen Argumenten kompiliert, die Wörterbücher mit den erforderlichen Implementierungen für jede bestimmte Typklasse erhalten.

  • Gibt es andere Möglichkeiten, wie Typklassen kompiliert werden?
  • Wenn ja, was sind ihre (Nachteile)?
  • Und welche Compiler verwenden sie?

4
Es gibt ziemlich viel Literatur zu diesem Thema. Beginnen Sie vielleicht mit der Implementierung von Typklassen von J. Peterson, M. Jones. Sie können sich auch Typklassen als Objekte und Implikationen von Oliveira et al. Anschauen , die im Kontext von Scala darüber sprechen, aber einen ziemlich großen Abschnitt über verwandte Arbeiten enthalten.
Martin Berger

1
Ich habe einen Link zum Artikel gefunden: Typklassen implementieren. John Peterson und Mark P. Jones .
Petr Pudlák

1
@ MartinBerger machen dies eine Antwort?
Suresh Venkat

Den anderen finden Sie hier .
Martin Berger

@ Suresh Venkat, ich wollte es nicht beantworten, weil ich nicht sicher bin, ob diese beiden die besten oder sogar guten Antworten sind. Es ist schon eine Weile her, dass ich mir Implementierungen funktionaler Sprachen angesehen habe. Vielleicht können sich einige der ansässigen FP-Bods einschalten.
Martin Berger

Antworten:


8

JHC verwendet einen anderen Ansatz. Die Zwischensprache des Compilers ist ein abhängig typisierter Lambda-Kalkül, bei dem es keinen Unterschied zwischen Typen und Werten gibt. JHC kann daher eine Fallanalyse des Typparameters einer Funktion durchführen und die richtige überladene Funktion direkt aufrufen.

Die JHC- Website befasst sich eingehend mit der Implementierung und ihren Vorteilen gegenüber der Standard-Dictionary-Passing-Implementierung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.