2015-08-27 5 views
1

Je suis un tutoriel pour créer un nouveau type. Ceci est mon code:Impression de nouveaux types dans Haskell

data Shape = Circle Float Float Float | Rectangle Float Float Float Float 

Quand je charge le fichier avec ghci et type I:

Circle 10 20 5 

Il imprime ceci:

<interactive>:29:1: 
    No instance for (Show Shape) arising from a use of ‘print’ 
    In a stmt of an interactive GHCi command: print it 

Comment puis-je résoudre ce problème?

Répondre

10

La fonction show est de type:

show :: Show a => a -> String 

Ce qui signifie qu'il ne fonctionne que sur les choses avec un cas Show. Vous pouvez faire vos types une instance de la Show classe soit par définition manuellement une instance ou de laisser le compilateur dériver automatiquement une:

data Shape = Circle Float Float Float | Rectangle Float Float Float Float 
    deriving (Show) 

ou

instance Show Shape where 
    show (Circle a b c) = "Circle " ++ show a ++ " " ++ show b ++ " " ++ show c 
    show (Rectangle a b c d) = ... 
0

Je l'ai résolu en tapant ceci dans l'interpréteur:

:s -u 
+2

Ceci ne fonctionne pas ici (sur GHC 7.10.1). Tout ce que je reçois est 'IO error: "-u" n'existe pas ". – duplode

+0

Oui désolé, il résout le problème avec des câlins mais pas dans ghci – Alan

+0

Oh, c'est pour une classe? Qui est la classe, Jones? –