Devo definire una classe di tipo Truthy
che contiene un metodo true
che converte un'istanza della classe di tipo in un valore Bool
.Come scrivere un'istanza per tutti i tipi in un'altra classe di tipi?
mio tipo dichiarazione di classe:
class Truthy a where
true :: a -> Bool
Avanti, devo definire istanze di questa classe di vari tipi, tra cui lista e tipi numerici. L'ho fatto per le liste e Int
s, ma c'è un modo per farlo per tutti i tipi numerici contemporaneamente?
Sulla base della mia dichiarazione Int:
instance Truthy Int where
true = (/=) 0
Ho provato ad aggiungere vincolo tipo di classe, ma non funziona:
instance (Num a) => (Truthy a) where
true = (/=) 0::a
Se c'è un modo per farlo simile a quello che aveva in mente, o dovrei semplicemente definirlo separatamente per ciascun tipo numerico?
"o dovrei semplicemente definirlo separatamente per ciascun tipo numerico?" - in una parola ** Sì **. L'obiettivo di progettazione delle classi di tipi è consentire l'overloading per ogni tipo. Con le estensioni può essere possibile definire istanze "overreaching" ma di solito sono un difetto di progettazione. –
possibile duplicato di [Dichiarare tutte le istanze di un typeclass in un'altra classe di caratteri senza modificare le dichiarazioni di classe originali] (http: // stackoverflow.it/questions/8461029/declare-all-instances-of-a-typeclass-are-in-another-typeclass-senza-modifica) –