J'ai quelques difficultés à comprendre lors de l'utilisation et quand ne pas utiliser typeclass dans mon code. Je veux dire créer mon propre, et non utiliser déjà défini typeclasses, bien sûr. Par exemple (exemple très stupide), dois-je faire:Devrais-je utiliser des typeclasses ou non?
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 = ...
(Évidemment, ceci est un exemple stupide, incomplète).
Mais c'est beaucoup pour une petite utilisation, non? Pourquoi je ne devrais pas faire quelque chose de simple et seulement définir des fonctions sans définir de nouveaux types de données et typeclasses (avec leurs instances).
Cet exemple est trop simple, mais en fait, je vois souvent des choses comme ça (nouveaux types de données + typeclasses + instances) quand je parcours le code Haskell sur github au lieu de définir uniquement des fonctions. Donc, quand je devrais créer de nouveaux types de données, typeclasses etc et quand devrais-je utiliser des fonctions?
Merci.
Ouais! C'est une réponse très complète, merci beaucoup! Votre "ne pas utiliser les classes de caractères si ..." sera particulièrement utile pour choisir la bonne façon de faire quelque chose. – vildric
Je voudrais ajouter à cela "ne pas utiliser typeclasses juste pour une méthode", même si ce n'est pas une règle absolument rigide, plus comme un indice général. – MathematicalOrchid
@MathematicalOrchid Cela fait en quelque sorte partie de la règle des "besoins" puisque vous aurez rarement des lois pour une classe de type avec une seule méthode (à l'exception de "SemiGroup", où vous avez la loi d'associativité) –