Ich nehme an, Sie versuchen, eine Instanz der Standardtypenklasse Eq
für Ihren benutzerdefinierten Datentyp zu machen. Die Eq
Klasse ist definiert als:
class Eq a where
(==) :: a -> a -> Bool
a == b = not (a /= b)
(/=) :: a -> a -> Bool
a /= b = not (a == b)
Das heißt, es definiert zwei Methoden ==
und /=
(die Operatoren geschehen sein), und liefert Standardimplementierungen von jeder in Bezug auf den anderen. Um also eine Instanz von Eq
für Ihren eigenen Typ zu erstellen, müssen Sie eine Implementierung einer oder beider dieser Funktionen (==
oder /=
) für Ihren Typ bereitstellen. Beachten Sie, dass der Körper der instance
eingerückt sein muss.
instance Eq Egg where
Soft == Soft = True
Hard == Hard = True
_ == _ = False
So wie Sie von ein Haskell Operator in Präfix-Formular kann in Klammern Einwickeln, zB (==) 1 1
, können Sie auch implementieren einen Operator Definition in Präfix Form:
instance Eq Egg where
(==) Soft Soft = True
(==) Hard Hard = True
(==) _ _ = False
Sie könnten sogar eine case
verwenden, wenn Sie dies wünschen:
Beachten Sie, dass diese alle die gleiche wie die Instanz, die automatisch für Sie mit deriving
erzeugt würden:
data Egg = Soft | Hard
deriving (Eq)
das ist, was ich als gut gedacht, aber sie schrieb bereits Instanz Eq Egg, wo (==) und ich brauche die abzuschließen Code. Das (==) verwirrt mich so sehr – Lorenzo
Sind Sie verwirrt über den Operator (==)? Ich werde meine Lösung bearbeiten, um eine Präfix-Version anzuzeigen –
Ich bin so dumm, danke für Ihre Antwort! Total vergessen, dass das ein Präfix ist – Lorenzo