Soll ich eine Typenklasse verwenden oder nicht?

Ich habe einige Schwierigkeiten zu verstehen, wann ich eine Typenklasse in meinem Code verwende und wann nicht. ich meineerschaffe meine eigene, und nichtVerwendung bereits definiert natürlich typen. Durch Beispiel (sehr dummes Beispiel) sollte ich tun:

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 viel für eine kleine Verwendung, nicht wahr? Warum sollte ich nicht etwas Einfaches tun und nur Funktionen definieren, ohne neue Datentypen und Typklassen (mit ihren Instanzen) zu definieren?

Dieses Beispiel ist zu einfach, aber in der Tat sehe ich oft solche Dinge (neue Datentypen + Typklassen + Instanzen), wenn ich Haskell-Code auf Github durchsuche, anstatt nur Funktionen zu definieren.

Wann sollte ich also neue Datentypen, Typenklassen usw. erstellen und wann sollte ich Funktionen verwenden?

Vielen Dank.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage