Laut Harper (https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/) scheint es, dass Typklassen nicht das gleiche Maß an Abstraktion bieten, das Module bieten, und es fällt mir schwer, genau herauszufinden, warum. Und es gibt keine Beispiele in diesem Link, so dass es schwer für mich ist, die wichtigsten Unterschiede zu sehen. Es gibt auch andere Papiere, wie man zwischen Modulen und Typklassen übersetzt (http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf), aber das hat nicht wirklich etwas mit der Implementierung in der Perspektive des Programmierers zu tun (es sagt nur, dass es nichts gibt, was man tun kann, dass andere können nicht emulieren).(ML) Module vs (Haskell) Typ Klassen
Insbesondere im first link:
Die erste ist, dass sie darauf bestehen, dass ein Typ eine Typklasse in genau einer Art und Weise umsetzen können. Zum Beispiel können nach der Philosophie der Typklassen die ganzen Zahlen genau auf eine Weise geordnet werden (die übliche Ordnung), aber offensichtlich gibt es viele Ordnungen (zum Beispiel durch Teilbarkeit) von Interesse. Die zweite besteht darin, dass sie zwei getrennte Probleme durcheinander bringen: Festlegen, wie ein Typ eine Typklasse implementiert und angeben, wann eine solche Spezifikation während der Typinferenz verwendet werden soll.
Ich verstehe auch nicht. Ein Typ kann eine Typklasse auf mehr als 1 Weise in ML implementieren? Wie würden Sie die Ganzzahlen durch Teilbarkeit geordnet haben, ohne einen neuen Typ zu erstellen? In Haskell müssten Sie etwas wie Daten verwenden und haben die instance Ord
, um eine alternative Bestellung anzubieten.
Und die zweite, sind nicht die beiden in Haskell eindeutig?
blah :: BlahType b => ...
wo BlahType die Klasse während der Typinferenz und NICHT der implementierenden Klasse verwendet wird, ist: Die Angabe von „wenn eine solche Angabe bei der Typinferenz verwendet werden sollte,“ kann durch so etwas getan werden. Dagegen wird "wie ein Typ eine Typklasse implementiert" unter Verwendung von instance
ausgeführt.
Kann jemand erklären, was der Link wirklich versucht zu sagen? Ich verstehe einfach nicht, warum Module weniger restriktiv sind als Typenklassen.
Wie löst ML diese Mehrdeutigkeit? Ja, in Haskell musst du es in einen anderen Typ einpacken. Aber wie geht ML damit um? "Ein Typ kann eine Typklasse in mehr als 1 Weise in ML implementieren? Wie würden Sie die Ganzzahlen durch Teilbarkeit sortiert haben, ohne einen neuen Typ zu erstellen?" wird dadurch nicht wirklich beantwortet. –
@RahulManne überhaupt kein ML-Programmierer *, aber ich glaube, es ermöglicht Ihnen im Wesentlichen "Instanzen" zu nennen und gezielt auszuwählen, welche in den Geltungsbereich zu bringen (durch den Einsatz von erstklassigen Modulen für diesen Zweck anstelle von Klassen). – Ben
@Ben, wenn das der Fall ist, frage ich mich, ist es möglich, eine ähnliche Sache zu tun, wo Sie die Instanz in einer anderen Datei definieren, und das Importieren dieser Datei wird nur diese Instanz verwenden? Ich werde es ausprobieren. –