Frage

Wenn Sie mit abgeleiteten Instanzen in Haskell arbeitet, ist es möglich herzuleiten Funktionen für beliebige Arten, oder sind wir auf bestimmte Funktionen beschränkt?

War es hilfreich?

Lösung

Sie können Instanzen der folgenden Klassen in Haskell ableiten. 98: Eq, Ord, Enum, Ix, Bounded, Lesen und Show

ghc Erweiterungen verwenden, können Sie auch derive Instanzen der folgenden Klassen: typisierbarer, Daten, Functor, faltbar und Travers. Es gibt auch eine ghc Erweiterung, die ein newtype herzuleiten Instanzen von seiner Implementierung Typ ermöglicht.

Sie können nicht ableiten Fälle willkürlicher Klassen aus dem einfachen Grund, dass Haskell nicht weiß, wie die notwendigen Funktionen ohne spezielle Kenntnisse über die betreffende Klasse zu erzeugen.

Andere Tipps

Sie sind auf bestimmte Klassen beschränkt, in Hinblick darauf, was der Compiler weiß, wie für Sie abzuleiten. Mit einem Prä-Prozessor oder Template Haskell, können Sie sich neue Berechnungsmechanismen Code auf, wenn Sie von allgemeinen Ansätzen kennen Implementierungen von Funktionen für bestimmte Typen zu ergeben.

Die beiden anderen Antworten sind richtig. Aber wenn Sie mehr benötigen, gibt es einige Pakete auf Hackage, die mehr verarbeiten kann. Ich mag Data.Derive viel, da Sie den Quellcode direkt erzeugen kann (für die Kompatibilität) oder Haken es in Template Haskell es bei der Kompilierung zu tun. Eine breite Palette von Klassen werden bereits unterstützt, und es ist sehr einfach, Unterstützung für Ihre eigenen hinzuzufügen. Zusammenfassung: Werbung Platz für eine verdammt schöne Bibliothek: -)

Um zu Don Antwort hinzu: Ableiten von benutzerdefinierten Funktionen für Datentypen genannt wird generische Programmierung und es gibt eine viel Literatur darüber. Preprozessoren und Template Haskell sind nicht die einzigen Lösungen; sieht eine der Übersicht Papiere, dass die Liste der Literatur für andere Optionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top