Also, ich einen Datentyp erstellenMuster für Alternate Instanzen von Eq Passende
data Expr a = Const a
| Expr a :*: Expr a
Und ich definieren eine Instanz für Eq
für diesen Datentyp
instance (Eq m) => Eq (Expr m) where
Const a == Const b = a == b
(a :*: b) == (c :*: d) = ((a == c) && (b == d)) || ((a == d) && (b == c))
Diese Definition bedeutet, dass Reihenfolge keine Rolle spielt wenn zwei Ausdrücke verglichen werden. Allerdings, wenn ich Muster verwenden passende, eine Funktion zu schreiben, die Expr
s dauert kann ich nicht nur
f (Const 1 :*: a) = ...
sondern auch
f (a :*: Const 1) = ...
, um alle Fälle schreiben zu fangen, obwohl, wenn ich wo zu Vergleichen Sie die beiden mit (==)
würde es wahr zurückgeben.
Gibt es eine Möglichkeit, nur einen der oben genannten Ausdrücke zu schreiben und die Instanz Eq
sich um den Rest kümmern? Wird bei der Mustererkennung eine Instanz von Eq
verwendet oder benötigt?