Algebraische Datentypen (ADT) in Haskell kann automatisch Instanzen einiger geworden typeclasse s (wieShow
,Eq
) durch Ableiten von ihnen.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Meine Frage ist, wie funktioniert das deriving
, dh woher weiß Haskell, wie die Funktionen der abgeleiteten Typklasse für das abgeleitete ADT implementiert werden?
Warum ist es deriving
nur auf bestimmte Typenklassen beschränkt? Warum kann ich keine eigene Typklasse schreiben, die abgeleitet werden kann?
quelle
StandaloneDeriving
im ghc Handbuch und in haskellwikiAus dem Haskell 98-Bericht:
Hier ist die Beschreibung, wie diese Typklassen abgeleitet werden: http://www.haskell.org/onlinereport/derived.html#derived-appendix
quelle
Es ist möglich, Template Haskell zu verwenden, um Instanzdeklarationen auf ähnliche Weise wie Ableitungsklauseln zu generieren.
Das folgende Beispiel wurde schamlos aus dem Haskell-Wiki gestohlen :
quelle