0
Ich habe einen Typ, der so aussieht, und ich möchte die compare
Funktion nur die Größe der Ganzzahl berücksichtigen. Haskell Instanz Ord Schwierigkeiten
data Cell = FromLeft Coordinate Int
| FromTop Coordinate Int
| FromDiagonal Coordinate Int
| Empty Coordinate
deriving (Eq, Read, Show)
Der folgende Code funktioniert, aber ich würde etwas elegantere
instance Ord Cell where
compare (FromLeft _ x) (FromLeft _ y) = compare x y
compare (FromRight _ x) (FromLeft _ y) = compare x y
[...]
Dies ist keine gute 'Ord'-Instanz, da verschiedene Werte als gleichwertig verglichen werden, auch wenn sie sich im Feld' Coordinate' unterscheiden. Wie soll 'Empty' auch vergleichen? – leftaroundabout
@leftroundabout Ja, du hast mir klar gemacht, dass '' 'Ord''' wirklich nicht das ist, wonach ich suche. Es fühlt sich an wie in Haskell, du verbringst viel Zeit damit, zu versuchen, das Typsystem zu umgehen, nur um zu erkennen, dass du es stattdessen gehört haben solltest. – davorb
Sie könnten einen neuen Typ für Ihre 'Ord' -Instanz definieren, anstatt ihn direkt auf' Cell' zu definieren (ähnlich wie es keine 'Monoid'-Instanz für einen numerischen Typ gibt, sondern separate Instanzen für 'Product' und' Sum') Arten). – chepner