2015-10-11 1 views
0

J'essaye de faire une paire une instance de Printable, mais je ne peux pas comprendre la syntaxe correcte. Mon imprimable est la suivante:Syntaxe de Haskell par exemple

class Printable a where 
    toString :: a -> [Char] 

instance Printable Bool where 
    toString True = "true" 
    toString False = "false" 
instance Printable() where 
    toString() = "unit type" 

et mon exemple pour les paires est la suivante:

instance Printable (a, b) where 
    toString (a,b) = "(" ++ toString a ++ ","++ toString b ++ ")" 

qui, lors de la compilation, me donne un No instance for (Printable a) arising from a use of ‘toString’. Qu'est-ce que je fais de mal?

+0

BTW, ceci est une erreur de type, pas une erreur de syntaxe. –

Répondre

5

Vous devez a et b être des cas de Printable:

instance (Printable a, Printable b) => Printable (a, b) where 
    toString (a,b) = "(" ++ toString a ++ ","++ toString b ++ ")" 
+0

C'est tout. Merci. Je devrais relire certaines choses sur les instances, probablement. – Chiffa