Ich habe einige Schwierigkeiten zu verstehen, wenn in meinem Code verwenden und wenn nicht Klasse verwenden. Ich meine erstellen Sie meine eigenen, und nicht Verwendung bereits definiert Typklassen, natürlich. Mit Beispiel (sehr dummes Beispiel), sollte ich tun:Sollte ich Typklassen verwenden oder nicht?
data Cars = Brakes | Wheels | Engine
data Computers = Processor | RAM | HardDrive
class Repairable a where
is_reparaible :: a -> Bool
instance Repairable Cars where
is_repairable (Brakes) = True
is_repairable (Wheels) = False
is_repairable (Engine) = False
instance Repairable Computers where
is_repairable (Processor) = False
is_repairable (RAM) = False
is_repairable (HardDrive) = True
checkState :: (Reparaible a) => a -> ...
checkState a = ...
(Offensichtlich ist dies ein dummes, unvollständiges Beispiel).
Aber das ist eine Menge für einen kleinen Einsatz, nicht? Warum sollte ich nicht etwas Einfaches machen und nur Funktionen definieren, ohne neue Datentypen und Typklassen (mit ihren Instanzen) zu definieren.
Dieses Beispiel ist zu einfach, aber in Fakten sehe ich oft so etwas (neue Datentypen + Typklassen + Instanzen), wenn ich Haskell-Code auf github suche, anstatt nur Funktionen zu definieren.
Also, wenn ich neue Datentypen erstellen sollte, typeclasses etc und wann sollte ich Funktionen verwenden?
Danke.
Yeah! Dies ist eine sehr vollständige Antwort, vielen Dank! Ihre "Klassen nicht verwenden, wenn ..." ist besonders hilfreich, um den guten Weg zu wählen, etwas zu tun. – vildric
Ich würde hinzufügen, "Typklassen nicht nur für eine Methode verwenden", obwohl dies keine absolut starre Regel ist, eher wie ein allgemeiner Hinweis. – MathematicalOrchid
@MathematicalOrchid Das ist ein Teil der "Bedürfnisse Gesetze" Regel, da Sie selten Gesetze für eine Typklasse mit nur einer Methode haben werden (mit Ausnahme von etwas wie 'SemiGroup', wo Sie das Assoziativitätsgesetz haben) –