Ho alcune difficoltà a capire quando uso e quando non uso typeclass nel mio codice. Intendo lo creare il mio e non lo utilizzare i typeclass già definiti, naturalmente. L'esempio (molto stupido esempio), devo fare:Devo usare typeclass o no?
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 = ...
(Ovviamente, questo è un stupido, esempio incompleto).
Ma questo è molto per un piccolo uso, no? Perché non dovrei fare qualcosa di semplice e solo definire le funzioni senza definire nuovi tipi di dati e tipografie (con le loro istanze).
Questo esempio è troppo semplice, ma in realtà vedo spesso qualcosa di simile (nuovi tipi di dati + typeclass + istanze) quando sfoglio il codice Haskell su github anziché solo le funzioni di definizione.
Quindi, quando dovrei creare nuovi tipi di dati, typeclass ecc. E quando devo usare le funzioni?
Grazie.
Sì! Questa è una risposta molto completa, grazie mille! Il tuo "non usare classi di tipi se ..." sarà particolarmente utile per scegliere il buon modo di fare qualcosa. – vildric
Vorrei aggiungere a questo "non usare i typeclass solo per un metodo", sebbene questa non sia una regola assolutamente rigida, più simile a un suggerimento generico. – MathematicalOrchid
@MathematicalOrchid Questa è una parte della regola "leggi di necessità" poiché raramente si hanno leggi per una classe di tipi con un solo metodo (ad eccezione di qualcosa come "SemiGroup", dove si ha la legge di associatività) –