Instanz Entschuldigen Sie meine schlechte Englisch. Der Titel erklärt vielleicht nicht, was ich meine.wie Eq ohne Ableiten
In Data.Tree wird Tree
wie folgt definiert:
-- | Multi-way trees, also known as /rose trees/.
data Tree a = Node {
rootLabel :: a, --^label value
subForest :: Forest a --^zero or more child trees
}
#ifdef __GLASGOW_HASKELL__
deriving (Eq, Read, Show, Data)
#else
deriving (Eq, Read, Show)
#endif
Es deriving
zum Beispiel ==
und /=
für Tree
(Datum) verwendet.
Kann ich das gleiche tun, ohne abzuleiten? Ich versuche, Dinge wie diese:
data Test a = Test a
instance Eq Test where
(Test a) == (Test b) = a == b
Aber es gibt eine Ausnahme aus. Ich denke, der Grund ist über die Arten von a und b.
Und was kann ich tun, wenn ich eine benutzerdefinierte Aktion für meine Daten mit ==
definieren möchte.
Ich weiß, ich kann Functor
mit fmap
verwenden, um es zu tun. Aber ich möchte ==
wie a == b
verwenden, wo a = Test 1
und b = Test "a"
. Ist es möglich?
N.B. 'Forest a' ist ein Typensynonym für' [a] ', also ist technisch die' Eq (Forest a) 'Bedingung nicht notwendig, da' Eq a' bereits 'Eq [a]' impliziert. Aber diese Antwort ist angesichts der Parameter der Frage klar. – luqui
@ Luqui: Sie haben Recht. Ich wusste nicht, dass ein Wald als '[Tree a]' definiert wurde (gut, es war möglich, dass einige zusätzliche Felder hinzugefügt wurden). Ich habe deine Antwort zusammen mit einem Kommentar zur Antwort hinzugefügt. Vielen Dank! –
Die letzten beiden Instanzen fehlen 'Eq' in' Eq (Tree a) '. – chi