Ich fange gerade Haskell zu lernen. Ich habe viele Intro Beispiele erläutern die Grundlagen der Typen gesehen, aber sie haben oft eine deriving
Erklärung unter dem Typ. Hier ist ein Beispiel von Chapter 3 of RealWorldHaskell:Was mit `deriving` in Haskell unter der Haube passiert?
data Cartesian2D = Cartesian2D Double Double
deriving (Eq, Show)
data Polar2D = Polar2D Double Double
deriving (Eq, Show)
Sie erklären Ableitung etwas in Chapter 6, was dazu beiträgt, Sie wissen, wie es verwendet wird.
So weit davon entfernt, was ich verstehe, ist deriving (Show)
notwendig Haskell zu sagen, wie Sie Ihre Art in einen String zu drehen. Das ist praktisch sinnvoll. Ich komme aus JavaScript Land, so mir Sie dies leicht wie umgesetzt würde sich vorstellen kann:
Polar2D.prototype.toString = function(){
return '[Polar2D]';
};
In Haskell, sie geben das Beispiel dafür, wie Sie Ihre eigenen Show
für die Color
Art zu implementieren, anstatt deriving
zu verwenden.
data Color = Red | Green | Blue
instance Show Color where
Red = "red"
Green = "green"
Blue = "blue"
Das bedeutet, wenn Ihr in den ghci
repl, können Sie tun:
> show Red
"red"
Aber das erklärt nicht, was deriving
tatsächlich tun, ist es noch zu mir Magie.
Meine Frage ist, was mit deriving
unter der Haube geschieht? Gibt es auch einen Platz auf GitHub in der Haskell-Quelle, wo Sie die Implementierung sehen können? Das kann auch hilfreich sein.
das stimmt hier, aber einige seltsame Sachen können passieren (obwohl ich kein Experte für GHC bin). wie [1] mit 'GeneralizedNewTypeDeriving' erzeugt es keine Instanzen, sondern verwendet die Instanzen der inneren Typen sicher wieder. auch [2] mit 'DerivateDataTypeable', können Sie keine manuelle' Typable' Instanz schreiben. –